Java SpringBoot2.0 接收 JSON 参数问题

2022-01-06 13:30:37 +08:00
 LinsVert

各位 V2 大佬在使用SpringBoot接受 JSON 参数时,是不是都得用个实例对象去接受这个参数;

比如 @RequestBody Example example 这样的形式,这就很僵硬,如果用 @RequestBody Map<String, Object> example 可读性又太差,有没有一种方式能接受 JSON 参数,可以直接在 Controller 里直接写明参数的方法?比如 public void abc(Integer abc) 这样的形式的。

不胜感激~

1102 次点击
所在节点    问与答
6 条回复
yangyaofei
2022-01-06 13:46:25 +08:00
1. 没有
2. 不应该这么用
3. 实体类直接交给 service 处理对应业务就行了, controller 不应该在这里处理东西
4. 确实会有只需要实体类中的部分值进行某个业务的(如创建), 这个地方有一些解决方案,比如持久化的和前台的不是一个,一对多,再转换. 持久化类进行继承(有弊端也有好处)
constantine008
2022-01-06 14:06:21 +08:00
换个思路 OpenAPI+swagger
mango88
2022-01-06 15:43:55 +08:00
为啥会觉得僵硬呀 ?


可以定制个参数解析器,关键词: HandlerMethodArgumentResolver

解析 JSON 值,再赋值到方法里其他参数上
gadfly3173
2022-01-06 17:06:49 +08:00
参数不多且不是必须用 post/put 之类的情况下,用 get 解析 request param 也可以
LinsVert
2022-01-06 17:14:16 +08:00
@mango88 好的谢谢~
clf
2022-01-06 17:19:24 +08:00
所以就是没写方法的注释?

如#3 所说的那样,你可以自定义一个 Resolver ,然后在初始化的时候替换掉默认的 Resolver 。

@RequestBody 对应的是 RequestResponseBodyMethodProcessor ,可以参考一下。

然后弄个类继承 WebMvcConfigurer ,重写 addArgumentResolvers(List<HandlerMethodArgumentResolver> resolvers)方法,里面 add 你的 resolver 就行了。类上 @Configuration @EnableWebMvc 注解。

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/826570

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX