【问题标题】:JSON body in Spring Boot's @RequestBody [duplicate]Spring Boot 的 @RequestBody 中的 JSON 正文 [重复]
【发布时间】:2019-09-11 07:46:42
【问题描述】:

我有一个 Spring Boot 应用程序,它在 Http 请求的正文中接受 JSON 字符串。我做了这样的控制器

   @RequestMapping(method = RequestMapping.POST, consumes = MediaType.APPLICATION_JSON_VALUE, value = "/foo")
   public void acceptPost(@RequestBody TestModel t) {
        ....
   }

我的 JSON 字符串是这样的

    {
        "name" : "ABC",
        "age" : 20
    }

Spring Boot 能够将请求正文编组到 TestModel POJO。但我有兴趣做以下事情

    @RequestMapping(method = RequestMapping.POST, consumes = MediaType.APPLICATION_JSON_VALUE, value = "/foo")
    public void acceptPost(String name, Integer age) {
        ....
    }

nameage 作为参数传入,没有中间对象来保存传递的 JSON 字符串。

有没有可以使用的注解或者覆盖Spring Boot中现有接口或注解的方法来帮助我得到我想要的?

【问题讨论】:

  • 没有开箱即用的方式来做你想做的事。您需要编写一个自定义方法参数处理程序。
  • 感谢您的建议。我按照你的建议做了,效果很好。

标签: java spring-boot


【解决方案1】:

你的做法是正确的。这是明智的做法,实际上也是一种安全的方式。你可以使用@PostMapping注解(也支持consumes属性)代替@RequestMapping

【讨论】:

    【解决方案2】:

    我同意每个人的观点,但如果您不想创建 pojo 类,请将其作为 JSON 字符串获取 @RequestBody String json。

    稍后使用 ObjecMapper 将其解析为 Map 然后使用键获取值。这不是必需的,但这是实现它的另一种方式。

    【讨论】:

    • 我遵循了@shazin 在评论中的建议。它奏效了。
    【解决方案3】:

    不,如果它是普通的查询/路径参数或请求正文,那么这种映射是可能的。

    JSON 不是“通用”HTTP 传输对象,因此任何框架都不会理想地支持 String-within-a-JSON 到 String 和 Integer-within-a-JSON 到 Integer 类型的开箱即用映射。

    您可以有一个类来获取反序列化的 JSON 对象,或者您自己可以使用查询/路径参数或只是请求正文。

    【讨论】:

      猜你喜欢
      • 2017-10-18
      • 1970-01-01
      • 2017-08-22
      • 2018-01-23
      • 2017-08-23
      • 2022-01-04
      • 2021-02-07
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多