J'écris un service Web la première fois. J'ai créé un service Web RESTful basé sur Jersey . Et je veux produire du JSON. Que dois-je faire pour générer le type JSON correct de mon service Web?
Voici l'une de mes méthodes:
@GET
@Path("/friends")
@Produces("application/json")
public String getFriends() {
return "{'friends': ['Michael', 'Tom', 'Daniel', 'John', 'Nick']}";
}
Est-il suffisant que je signale simplement l'annotation @Produces("application/json")
pour ma méthode? Alors cette méthode peut renvoyer n'importe quel type d'objet? Ou seulement String? Ai-je besoin d'un traitement ou d'une transformation supplémentaire de ces objets?
Aidez-moi en tant que débutant à résoudre ces problèmes. Merci d'avance!
Vous pouvez annoter votre haricot avec des annotations jaxb.
@XmlRootElement
public class MyJaxbBean {
public String name;
public int age;
public MyJaxbBean() {} // JAXB needs this
public MyJaxbBean(String name, int age) {
this.name = name;
this.age = age;
}
}
et alors votre méthode ressemblerait à ceci:
@GET @Produces("application/json")
public MyJaxbBean getMyBean() {
return new MyJaxbBean("Agamemnon", 32);
}
Il y a un chapitre dans la documentation la plus récente qui traite de cela:
https://jersey.Java.net/documentation/latest/user-guide.html#json
Vous pouvez utiliser un paquet comme org.json http://www.json.org/Java/
Parce que vous devrez utiliser JSONObjects plus souvent.
Là, vous pouvez facilement créer JSONObjects et y mettre quelques valeurs:
JSONObject json = new JSONObject();
JSONArray array=new JSONArray();
array.put("1");
array.put("2");
json.put("friends", array);
System.out.println(json.toString(2));
{"friends": [
"1",
"2"
]}
edit Ceci a l'avantage de pouvoir construire vos réponses dans différentes couches et de les renvoyer sous forme d'objet.
@GET
@Path("/friends")
@Produces(MediaType.APPLICATION_JSON)
public String getFriends() {
// here you can return any bean also it will automatically convert into json
return "{'friends': ['Michael', 'Tom', 'Daniel', 'John', 'Nick']}";
}
@POST
@Path ("Employee")
@Consumes("application/json")
@Produces("application/json")
public JSONObject postEmployee(JSONObject jsonObject)throws Exception{
return jsonObject;
}
Utilisez cette annotation
@RequestMapping(value = "/url", method = RequestMethod.GET, produces = {MediaType.APPLICATION_JSON_VALUE})