记录SpringBoot使用时的一些小坑大雷
返回结果类Result
要有get set
方法
否则会报错:
HttpMediaTypeNotAcceptableException
或者前端调用接口会返回 406 状态码 即客户端无法解析服务端内容
错误原因:
客户端请求期望与服务器响应的媒体类型不一致,一般都是用json格式(控制器使用@RestController
注解);如果Result
类没有get set
方法会在对象转换成json时出问题
不要忘记扫描/注入mapper
有时使用自动生成的代码可能没有@Mapper
注解,这可能会导致项目启动失败
解决:
- 在
mapper.java
类加上注解@Mapper
- 或者在启动类上标注
@MapperScan(${path})
,path
是mapper.java
类的所在目录(目的是扫描到所需类)
@RequestBody
注解不能用在Get
方法中
其实这个算网络的知识点,Get
请求的参数是通过url
方法传递而不是请求体,所以无法用@RequestBody
注解接收
解决:
- 将请求方法转换为
Post
- 使用多个
RequestParam
接受后拼装成对象 - 使用
@ModelAttribute
注解 - 使用
JSON
格式接收数据,再转化为对象
对于依赖循环
这个太容易发生了,特别是架构设计没规划好的时候,写着写着就报错了
解决
- 使用
@Lazy
注解,对一个Bean
进行延时加载。注入代理,使用时才被完全初始化 Setter
/Field
注入,实际上依赖没有被注入,只有需要时才被注入@Autowired
注解将required
属性设置为false
等等,不止这些
其实真正合理且符合架构设计准则的是重构,解耦规划
对于依赖循环的底层下次可以好好唠唠