如何验证包含多个有效json请求的requestbody?

时间:2019-01-24 14:00:06

标签: java spring-boot spring-mvc jackson jackson-databind

当我在请求正文下为POST请求提供多个json请求时,第一个请求被接受,其余请求被忽略。

我实际上不想发送列表作为请求,我正在请求中提供多个请求或说重复的请求。

这里是一个例子:

请求:

{
  "Business": {
    "name": "ABC"
  }
}
{
  "Business": {
    "name": "XYZ"
  }
}

控制器的方法:

Report getData(@RequestBody final Info info){ 
//Some code here... 
} 

此处 Info 是模型类,进一步具有带有getter和setter方法的 Business

当我在反序列化时发布上述请求时,第一个块转换为java对象,但是第二个块被简单地忽略了。我知道这是有效的json,但不明白为什么在反序列化时第二个块会被忽略。

我尝试了反序列化和杰克逊解析器属性,但是找不到任何可用的解决方案。我正在使用杰克逊库和Spring Boot框架。

我期望的行为是它应该抛出Bad Request而不是将其视为有效的json请求。

建议一种实现此目的的方法。谢谢!

3 个答案:

答案 0 :(得分:0)

您是list的sendind人,因此最好采用以下格式:

{
"Businesses" : [
       {"name": "ABC"},
       {"name": "ABC"}
       ]
}

如果接收到list,则控制器中的方法应接受一个列表:

@POST
@Path("/somePath")
@Consumes({ MediaType.APPLICATION_JSON })
your_method(ArrayList<Business> businesses){
     //...your code
}

答案 1 :(得分:0)

因此,您的Array.map批注应使用@RequestBody而不是List<Info>,并且在发送数据Info时也应使用json列表

答案 2 :(得分:0)

您可以像这样发布一个JsonArray:

[
    {
      "Business": {
        "name": "ABC"
      }
    }
    {
      "Business": {
        "name": "XYZ"
      }
    }
]

不仅仅是循环JsonObjects。 您可以使用Google的GSON或我个人喜欢使用的MinimalJson(https://mvnrepository.com/artifact/com.eclipsesource.minimal-json/minimal-json)依赖项来解析对象并确定它们是否符合标准。