我使用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;
}