0

我已经使用 jersey 有一段时间了,我刚刚实现了一个 POST 方法,它获取一个 Json 作为参数。但是我希望它像这样运行:

 // The json class to be used and returned
    @XmlRootElement
    public class Container 
    {
        private boolean isOk;
        private String message;

        public Container() {}

        public boolean getOk()
        {
            return this.isOk;
        }   

        public void setOk(boolean isOk)
        {
            this.isOk = isOk;
        }
    }

    // A service
    @Path("json/test")
    public class TestService 
    {
        @POST
        @Consumes(MediaType.APPLICATION_JSON)
        @Produces(MediaType.APPLICATION_JSON)
        public Container readAndReturnMessage(Container receivedJson)
        {
            doSomething(receivedJson.getMessage());
            return receivedJson;
        }   
    }

不幸的是,这不起作用。所有的 Container 变量都是空的,即使传递给服务的原始 json 没有任何问题。这里的方法是什么,我是否需要将 String 作为参数并使用 Jackson/Gson 反序列化?

4

2 回答 2

2

如果您没有添加任何标头,则需要在您的POST请求中添加Content-Type标头。由于您的应用程序正在使用application/json您需要 在 POST 请求中添加Content-Type: application/json 。

如果您的请求正文是以下形式: { "Container": { "isOk": "true", "message": "New message" } } 您将获得空值。

请求正文应采用以下形式: { "isOk": "true", "message": "New message" } 这很好用。

于 2015-04-25T10:18:47.727 回答
0

Container为您的班级添加 getter 和 setter 。

更新。以下是创建 Java Bean 的惯例。请参阅命名部分。顺便说一句,我在布尔字段上失败了。最好的方法:

boolean ok;

public boolean isOk(){
   return this.ok;
}

/* if setter is required */
public setOk(boolean ok){
   this.ok = ok;
}
于 2012-08-04T12:17:06.857 回答