• 踩坑记录:spring boot的POST请求数据注入不了的问题


    概述:

    今天在使用spring boot框架的时候,踩了一个坑,是关于control层request body依赖注入的问题的,内容如下:

    进过:

    由于目前公司采用的系统架构,要求把springboot的control层,以接口的形式单独暴露出入,而具体control层的代码,则放在另一个包里实现。这种把control层以接口方式实现的方式,导致了我今天在使用spring boot的@RequestBody的注解的时候,出了问题。

    根据我之前的经验,我是把control层的相关注解,都放在了接口类里。包括@RequestMapping、@Valid等,一路开发下来也没什么问题,GET请求都能正常收到。可是到了写POST的时候,出现问题了。一开始我是把@RequestBody放在接口类里的方法参数前的,可是这样就导致了所有传过来的body里的请求都注入不到参数对象里。后来经过很长时间的折腾,终于发现,把这个参数放在实现类里的方法参数前,就能接到传过来的数据了。而我又测了下,想把@Valid参数也放到实现方法的参数前,却发现这样不行,程序会报错。我猜测,可能是和2个注解的处理时机有关。@Valid方法应该是在接口实现前,就对参数进行了处理。而@RequestBody方法,则是在接口实现后,才对方法参数进行注入。

    总结:

    如果对spring boot的control层进行接口分类,@RequestBody注解要写在实现类里

    示例代码:

    接口类:

        /**
         * 发表评论
         *
         * @param commentAddVo 发表评论的内容VO
         * @return 执行结果
         */
        @RequestMapping(method = RequestMethod.POST, produces = MediaType.APPLICATION_JSON_VALUE, value = "/add")
        Result<Boolean> addComment(@Valid @RequestBody CommentAddVo commentAddVo);

    实现类:

        @Override
        public Result<Boolean> addComment(@RequestBody CommentAddVo commentAddVo) {
            //todo 这里info日志加用户id
            log.info("CommentFacade addComment entrance:userId");
            log.debug("CommentFacade addComment entrance:"+ commentAddVo);
    
            return ResultHelper.succeed(true);
        }

  • 相关阅读:
    Oracle OCP 11G 053(601-712)答案解析目录_20140304
    Oracle OCP 11G 053(201-400)答案解析目录_20140304
    Oracle OCP 11G 053(1-200)答案解析目录_20140304
    dojo实现表格数据无法展示
    dojo实现表格
    Matlab基本函数-menu函数
    Matlab基本函数-log10函数
    Matlab基本函数-log函数
    Matlab基本函数-length函数
    Matlab基本函数-imag函数
  • 原文地址:https://www.cnblogs.com/xujanus/p/9379425.html
Copyright © 2020-2023  润新知