web-dev-qa-db-fra.com

Comment produire correctement le service Web JSON by RESTful?

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!

20
Philiph Bruno

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

31
plasma147

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.

5
TheBassMan
@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']}";
}
4
bhanwar rathore
@POST
@Path ("Employee")
@Consumes("application/json")
@Produces("application/json")
public JSONObject postEmployee(JSONObject jsonObject)throws Exception{
    return jsonObject;
}       
1
nasir ali

Utilisez cette annotation

@RequestMapping(value = "/url", method = RequestMethod.GET, produces = {MediaType.APPLICATION_JSON_VALUE})
0
bijay dhital