web-dev-qa-db-ja.com

RESTful WebサービスによってJSONをどのように正しく生成しますか?

初めてWebサービスを作成しています。 Jersey に基づいてRESTful Webサービスを作成しました。そして、私はJSONを生成したいです。 Webサービスの正しいJSONタイプを生成するには何をする必要がありますか?

これが私の方法の1つです。

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

メソッドの注釈@Produces("application/json")を単に指摘するだけで十分ですか?次に、このメソッドは任意のタイプのオブジェクトを返しますか?または文字列のみですか?これらのオブジェクトの追加の処理または変換が必要ですか?

これらの問題に対処する初心者として私を助けてください。前もって感謝します!

19
Philiph Bruno

Beanに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;
    }
  }

そして、あなたの方法は次のようになります:

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

これを扱う最新のドキュメントの章があります:

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

31
plasma147

Org.json http://www.json.org/Java/ のようなパッケージを使用できます

JSONObjectsをより頻繁に使用する必要があるためです。

そこで、JSONObjectsを簡単に作成し、それにいくつかの値を入れることができます。

 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これには、異なるレイヤーで応答を作成してオブジェクトとして返すことができるという利点があります

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

このアノテーションを使用

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