Jersey POST方法参数为Class Object

时间:2012-08-04 01:08:58

标签: java json 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进行反序列化吗?

2 个答案:

答案 0 :(得分:2)

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

如果您的请求正文形式如下: {   "容器":{     " isOk":" true",     " message":"新消息"   } } 您将获得空值。

请求正文应为以下形式: {     " isOk":" true",     " message":"新消息" } 这很好。

答案 1 :(得分:0)

Container课程添加getter和setter。

UPD。 Here是创建Java Bean的约定。请参阅namings部分。顺便说一句,我失败了布尔字段。最好的方法:

boolean ok;

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

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