我一直在使用球衣一段时间,我刚刚实现了一个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进行反序列化吗?
答案 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;
}