3

JSON を文字列としてサービスに投稿できますが、POST コンテンツをJSONObjectタイプとして変更すると問題に直面します。

サーバー側のコード:

@POST
@Path("/post") 
@Consumes(MediaType.APPLICATION_JSON)
public Response setJson(JSONObject p){
    JSONObject obj = p;
    String x = obj.toString();;
    System.out.println(x);
    run(x);
    return Response.status(201).entity(x).build();
}

カールコマンド:

curl -X POST -H "Content-Type: application/json" -d '{"follow_request_sent": false,"default_profile": false, "following": false}' http://localhost:8080/HelloWorld/webresources/helloworld/post

エラー:

The server refused this request because the request entity is in a format not supported by the requested resource for the requested method (Unsupported Media Type)

Ps : JSONObject を受け入れるこのモードは GET ではうまく機能しますが、POST では問題が発生します

4

1 に答える 1

0

JAXB アノテーション付きのカスタム クラスを使用することをお勧めします。

@XmlRootElement
public class Thing {

    private boolean follow_request_sent;
    private boolean default_profile;
    private boolean following;

    // Constructors, Getters, Setters, toString()
}

次に、次のようにメソッドを記述できます。

@POST
@Path("/post")
@Consumes(MediaType.APPLICATION_JSON)
public Response setJson(Thing t) {
    System.out.println(t);
    return Response.status(201).entity(t).build();
}

ノート

  1. のようなパスは使用しないでください/post。のようなコレクション リソースを使用し/thingsます。POSTこのコレクション リソースに ing を実行すると、新しい が作成されますThing
  2. location(URI)の建物に追加しResponseます。これURIは、新しく作成された : の URI である必要がありThingます/things/23
于 2012-10-26T07:27:44.957 に答える