记录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
等等,不止这些
其实真正合理且符合架构设计准则的是重构,解耦规划
对于依赖循环的底层下次可以好好唠唠