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访问此集合资源将创建一个新的Thing.
  2. 添加location(URI)Response. 这URI应该是新创建的Thing:的 URI /things/23
于 2012-10-26T07:27:44.957 回答