Jersey POST方法参数为ClassObject



我使用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变量都为null,即使传递给服务的原始json没有任何问题。这里的方法是什么?我是否需要将String作为参数,并使用Jackson/Gson进行反序列化?

如果您尚未添加任何标头,则需要在POST请求中添加Content-Type标头。因为,您的应用程序正在消耗您需要添加的application/json内容类型:application/json和您的POST请求。

如果您的请求正文格式为:{"容器":{"isOk":"true","消息":"新消息"}}您将获得null值。

请求主体的形式应为:{"isOk":"true","消息":"新消息"}这很好用。

Container类添加getter和setter。

upd。以下是创建JavaBeans的便利条件。参见命名部分。顺便说一句,我在布尔字段方面失败了。最佳方式:

boolean ok;
public boolean isOk(){
   return this.ok;
}
/* if setter is required */
public setOk(boolean ok){
   this.ok = ok;
}

最新更新