/ / Ako funguje JAXB to JSON (a naopak) pomocou Jersey? - json, rest, jaxb, jersey

Ako funguje JAXB na JSON (a naopak) pomocou Jersey? - json, odpočinok, jaxb, dres

Úspešne som implementoval pokojnú službuktorý pracuje s mojím vlastným klientom. Teraz by som chcel urobiť službu, s ktorou môžu s ňou komunikovať aj iní klienti. Týmto spôsobom sa dostávam k nasledujúcim otázkam: (snímky môjho kódu prichádzajú za moje otázky, systém s mojím kódom funguje dobre)

1 - Ako sa prenášajú údajevyzerá server a klient? Zvážte, že som ešte nepoužil žiadne ďalšie anotácie JAXB (napríklad @XMLElement). Existuje spôsob, ako môžem vidieť produkovaný JSON?

2- JAXB má byť „Java Architecture forXML Binding “, je to teda odosielanie údajov ako XML alebo JSON (vzhľadom na to, že som špecifikoval typ požiadavky na json)? Alebo prevádza objekt na XML a potom na JSON v klientovi a v server, získava JSON a prevádza ho do XML a potom do Java objektu?

3 - Používam JAXB vo svojom klientovi, ale môj server jemal dostať žiadosť. Znamená to, že ktorýkoľvek iný klient, ktorý produkuje json s pármi „kľúč“ a „hodnota“, môže interagovať s mojím serverom? Alebo núti každého klienta používať JAXB (vzhľadom na to, že moja metóda na serveri obsahuje vstupné argumenty konkrétneho objektu JAXBBean)? Bohužiaľ, momentálne neviem, ako vytvoriť a poslať json v Jave bez použitia JAXB! Takže túto otázku by som nemohol otestovať skôr, ako sa opýtam .. Budem sa to učiť neskôr.

Časti môjho kódu:

Jersey som použil na vykonávanie pokojných služieb. Na strane klienta odošlem na server poštovú správu so zoznamom objektov JAXB. Každý objekt JAXB je príkladom fazule s anotáciou takto:

@XmlRootElement
public class JAXBBean {

String key;
String val;

//setters and getters (with no annotation) come here
...
}

A pošlem zoznam na server pomocou:

String response = (String) publishWR.type("application/json").post(String.class, new GenericEntity<List<JAXBBean>> (reqArr){});
// publishWR is of type: com.sun.jersey.api.client.WebResource
// reArr is of type: List<JAXBBean>

Na strane servera mám metódu, ktorá odpovedá na zverejnenie požiadaviek na tento webový zdroj, ktorý je napísaný takto:

@POST
@Consumes("application/json")
public String postAnnotation(List<JAXBBean> requestArr){
String anno = "";
String user = "";
...

for(int i = 0 ; i < requestArr.size() ; i++ ){
if( requestArr.get(i).getKey().equals("annotation") )
anno = requestArr.get(i).getVal();
else if( requestArr.get(i).getKey().equals("username") )
user = requestArr.get(i).getVal();
...
}
...
}

Ďakujem!

odpovede:

0 pre odpoveď č. 1

1. Odpoveď JSON si môžete stiahnuť pomocou prehliadača a pozrieť sa na ňu pomocou jednoduchého textového správcu (overiť a naformátovať JSON).
2 - Nie, poskytovateľ služby Jersey JSON používa Jackson ktorý serializuje / deserializuje objekty priamo v JSON a späť do Java Object.
3 - Áno, každý klient je schopný prečítať vašu odpoveď JSON.


0 pre odpoveď č. 2

Jersey na to využíva knižnicu Jettison. Jettison prevádza JSON na / zo StAX, ktorý je spracovávaný implementáciou JAXB: