java - Jersey POST 方法参数作为类对象

标签 java json jersey

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

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

最佳答案

如果您尚未添加任何 header ,则需要在 POST 请求中添加 Content-Type header 。 由于您的应用程序正在使用 application/json 您需要添加 Content-Type: application/json 以及您的 POST 请求。

如果您的请求正文采用以下形式: { “容器”: { "isOk": "正确", "message": "新消息" } } 您将得到空值。

请求正文的格式应为: { "isOk": "正确", "message": "新消息" } 这工作得很好。

关于java - Jersey POST 方法参数作为类对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11805100/

相关文章:

java - 如何在不使用集合 API 中的不可修改列表方法的情况下在 Java 中创建只读列表?

java - 比较方法违反了它的一般契约——但我可能想这样做?

java - 如何使用 Jersey 启用可恢复的 GET 请求?

java - method.invoke - java.lang.RuntimeException : java. lang.IllegalArgumentException:对象不是声明类的实例

java - Spring 注释 @Entry.base 不支持 SpEL

json - 尝试实现 amp-mustache 时出错

java - 使用 java 访问嵌套的 JSON 对象值

json - 将文件和相关数据以 JSON 形式发布到 RESTful WebService

java - Jackson 和 Jersey 的条件属性序列化

jaxb - Jersey + Moxy + JAXB - 如何在没有注释的情况下编码 XML