Spring Boot的@RequestBody中的JSON主体[重复]

问题描述 投票:0回答:3

我有一个Spring引导应用程序,它接受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
3个回答
1
投票

你的方式是正确的。这是可行的方法,实际上也是安全的方式。你可以使用@PostMapping注释(也支持consumes属性)而不是@RequestMapping


1
投票

我同意所有人的意见,但如果你不想创建一个pojo类,请将它作为JSON字符串@RequestBody String json。

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


0
投票

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

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

你可以有一个类来获取反序列化的JSON对象,或者你自己可以使用查询/路径参数或简单的请求体。

© www.soinside.com 2019 - 2024. All rights reserved.