V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
V2EX 提问指南
LinsVert
V2EX  ›  问与答

Java SpringBoot2.0 接收 JSON 参数问题

  •  
  •   LinsVert · 2022-01-06 13:30:37 +08:00 · 1075 次点击
    这是一个创建于 813 天前的主题,其中的信息可能已经有所发展或是发生改变。

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

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

    不胜感激~

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


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

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

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

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

    然后弄个类继承 WebMvcConfigurer ,重写 addArgumentResolvers(List<HandlerMethodArgumentResolver> resolvers)方法,里面 add 你的 resolver 就行了。类上 @Configuration @EnableWebMvc 注解。
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   我们的愿景   ·   实用小工具   ·   2832 人在线   最高记录 6543   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 37ms · UTC 14:54 · PVG 22:54 · LAX 07:54 · JFK 10:54
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.