web-dev-qa-db-de.com

Wie produzieren Sie JSON by RESTful-Webservice richtig?

Ich schreibe das erste Mal einen Webservice. Ich habe einen RESTful-Webservice basierend auf Jersey erstellt. Und ich möchte JSON produzieren. Was muss ich tun, um den richtigen JSON-Typ meines Web-Service zu generieren?

Hier ist eine meiner Methoden:

@GET
@Path("/friends")
@Produces("application/json")
public String getFriends() {
    return "{'friends': ['Michael', 'Tom', 'Daniel', 'John', 'Nick']}";
}

Reicht es aus, dass ich für meine Methode einfach auf die Annotation @Produces("application/json") hinweise? Dann kann diese Methode einen beliebigen Objekttyp zurückgeben? Oder nur String? Benötige ich eine zusätzliche Bearbeitung oder Umwandlung dieser Objekte?

Bitte helfen Sie mir als Anfänger bei der Bewältigung dieser Probleme. Danke im Voraus!

20
Philiph Bruno

Sie können Ihre Bean mit Jaxb-Anmerkungen versehen.

  @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;
    }
  }

und dann würde deine Methode so aussehen:

   @GET @Produces("application/json")
   public MyJaxbBean getMyBean() {
      return new MyJaxbBean("Agamemnon", 32);
   }

Die neueste Dokumentation enthält ein Kapitel, das sich damit befasst:

https://jersey.Java.net/documentation/latest/user-guide.html#json

31
plasma147

Sie könnten ein Paket wie org.json http://www.json.org/Java/ verwenden.

Weil Sie JSONObjects öfter verwenden müssen.

Dort können Sie einfach JSONObjects erstellen und einige Werte einfügen:

 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 Dies hat den Vorteil, dass Sie Ihre Antworten auf verschiedenen Ebenen erstellen und als Objekt zurückgeben können

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

Verwenden Sie diese Anmerkung

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