【问题标题】:How to get the list of objects from POST request in Json format如何从 Json 格式的 POST 请求中获取对象列表
【发布时间】:2018-11-23 04:13:34
【问题描述】:

我想在 dropwizard 中获取带有 Java/Jersey 对象列表的内容 JSON 正文

考虑json体

{
    "tag1" : "value",
    "parameter" : [ 
        {
            "name":"value1",
            "content":"value2"
        },
        {
            "name":"value1",
            "content":"value2"
        }
                ]
}

我尝试以

的身份接收请求
  @POST
  @Consumes(MediaType.APPLICATION_JSON)
  @Produces(MediaType.APPLICATION_JSON)
  public Response insertJob(
      @PathParam("tag1")
          String tag1,
      @JsonProperty("parameter")
          List<RequestParameter> parameter
  ) {

    return Response.ok(parameter).build();

  }

但我只收到"message": "Unable to process JSON"。当我将正文更改为仅列表时

[ 
    {
        "name":"value1",
        "content":"value2"
    },
    {
        "name":"value1",
        "content":"value2"
    }
                    ]

和java代码

@POST
@Consumes(MediaType.APPLICATION_JSON)
@Produces(MediaType.APPLICATION_JSON)
  public Response insertJob(
          List<RequestParameter> parameter
  ) {
    return Response.ok(parameter).build();

  }

我能够接收列表中的内容。如果列表有标签,我如何获取内容

【问题讨论】:

    标签: java json jersey


    【解决方案1】:

    为请求创建一个 pojo 类

        import com.fasterxml.jackson.annotation.JsonProperty;
    
    import java.util.List;
    
    public class Job {
    
        private String tag1;
    
        @JsonProperty("parameter")
        private List<RequestParameter> parameters;
    
        public String getTag1() {
            return tag1;
        }
    
        public void setTag1(String tag1) {
            this.tag1 = tag1;
        }
    
        public List<RequestParameter> getParameters() {
            return parameters;
        }
    
        public void setParameters(List<RequestParameter> parameters) {
            this.parameters = parameters;
        }
    }
    
    
    public class RequestParameter {
    
        private String name;
        private String content;
    
        public String getName() {
            return name;
        }
    
        public void setName(String name) {
            this.name = name;
        }
    
        public String getContent() {
            return content;
        }
    
        public void setContent(String content) {
            this.content = content;
        }
    }
    

    然后把控制器改成这个

    @Path(value = "/job")
    @POST
    @Consumes(MediaType.APPLICATION_JSON)
    @Produces(MediaType.APPLICATION_JSON)
    public Response insertJob(
            Job test
    ) {
        return Response.ok(test).build();
    
    }
    

    这是输出

    【讨论】:

    • 谢谢干得好。 JSON 正文中缺少逗号。对不起
    • 啊。看看我修改后的答案:)
    猜你喜欢
    • 1970-01-01
    • 2021-09-09
    • 2016-08-25
    • 1970-01-01
    • 1970-01-01
    • 2019-11-25
    • 1970-01-01
    • 2020-08-15
    • 1970-01-01
    相关资源
    最近更新 更多