Spring Boot的@RequestBody中的JSON主体

时间:2019-04-22 03:57:08

标签: java spring-boot

我有一个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中是否可以使用任何注释或覆盖现有接口或注释的方法来帮助我获得所需的信息?

3 个答案:

答案 0 :(得分:1)

您的做法是正确的。这是建议的方法,实际上也键入安全方法。而且您可以使用@PostMapping注解(它也支持consumes属性)代替@RequestMapping

答案 1 :(得分:1)

我与所有人都同意,但是如果您不想创建pojo类,请以JSON字符串@RequestBody String json的形式获取。

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

答案 2 :(得分:0)

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

JSON不是“通用” HTTP传输对象,因此,没有任何框架理想地支持将JSON内的String转换为String并将JSON内的Integer转换为Integer的现成映射。 / p>

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