MySQL, Oracle, Linux, 软件架构及大数据技术知识分享平台

网站首页 > 精选文章 / 正文

解决spirngBoot一个非常坑的问题

2025-01-13 14:23 huorong 精选文章 5 ℃ 0 评论

springboot的注解很丰富,但是也有很多坑,一不小心就导致项目启动不了,还半天找不到问题!



比如 @AllArgsConstructor这个注解,实现了所有构造的参数,都某些情况会导致项目启动不了。比如下面的代码:

@Slf4j
@RestController
@Api(tags="商品信息接口")
@RequestMapping("goods")
@Validated
@AllArgsConstructor
public class GoodsControl extends Basecontroller{
	 private final GoodsService goodsService;
   private static String host="127.0.0.1";

	     @PostMapping("insert")
      @ApiOperation("新增商品信息")
      public ApiResponse<Goods> insertGoods(@Valid @RequestBody GoodsDTO goodsDTO) {
          return goodsService.insertGoods(goodsDTO);
      }

}



上面的代码是一个很简单的control类,但是启动springboot项目会报错,找了半天不知道哪里的问题?

后来发现使用是这一行导致的:private static Stirng host="127.0.0.1";

我左思右想,这一行代码很简单,没有任何问题呀!

最终我发现是由于@AllArgsConstructor 注解引起的,她会把普通变量当成bean进行注入,

而String等基本类型是不能注入bean的,这就导致这个出错了!

如何解决呢?只要把@AllArgsConstructor去掉,同时使用@Autowired注解就可以了,正确代码如下:

@Slf4j
@RestController
@Api(tags="商品信息接口")
@RequestMapping("goods")
@Validated
//@AllArgsConstructor  不使用这个注解,其实它没什么了不起的
public class GoodsControl extends Basecontroller{
      @Autowired
      private  GoodsService goodsService; //改成@Autowired ,不是有final注入
  
      private static Stirng host="127.0.0.1";  //注释 @AllArgsConstructor之后,host就不会当成bean注入了

      @PostMapping("insert")
      @ApiOperation("新增商品信息")
       public ApiResponse<Goods> insertGoods(@Valid @RequestBody GoodsDTO goodsDTO) {
           return goodsService.insertGoods(goodsDTO);
       }
}


Tags:@apioperation

控制面板
您好,欢迎到访网站!
  查看权限
网站分类
最新留言