我有一个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) {
....
}
name
和age
作为参数出现,没有一个中间对象来保存JSON字符串。
是否有可以使用的注释或覆盖Spring Boot中现有接口或注释的方法来帮助我获得我想要的东西?
你的方式是正确的。这是可行的方法,实际上也是安全的方式。你可以使用@PostMapping
注释(也支持consumes
属性)而不是@RequestMapping
我同意所有人的意见,但如果你不想创建一个pojo类,请将它作为JSON字符串@RequestBody String json。
稍后使用ObjectMapper将其解析为Map,然后使用该键获取值。这不是必需的,但这是实现它的另一种方式。
不,如果它是普通的查询/路径参数或请求体,那么这种映射是可能的。
JSON不是“通用”HTTP传输对象,因此没有框架理想地支持String-in-a-JSON到String和Integer-in-a-JSON到Integer类型的开箱即用映射。
你可以有一个类来获取反序列化的JSON对象,或者你自己可以使用查询/路径参数或简单的请求体。