POST Jsonobject到jax-rs给出了不支持的mediatype

时间:2012-10-26 06:35:52

标签: json java-ee post jax-rs

我可以将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命令:

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)

P.s:这种接受JSONObject的模式适用于GET,但会产生POST

的问题

1 个答案:

答案 0 :(得分: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/things/23的URI。