抱歉,您的浏览器无法访问本站
本页面需要浏览器支持(启用)JavaScript
了解详情 >

记录SpringBoot使用时的一些小坑大雷


返回结果类Result要有get set方法

否则会报错:
HttpMediaTypeNotAcceptableException
或者前端调用接口会返回 406 状态码 即客户端无法解析服务端内容

错误原因:

客户端请求期望与服务器响应的媒体类型不一致,一般都是用json格式(控制器使用@RestController注解);如果Result类没有get set方法会在对象转换成json时出问题


不要忘记扫描/注入mapper

有时使用自动生成的代码可能没有@Mapper注解,这可能会导致项目启动失败

解决:

  • mapper.java类加上注解@Mapper
  • 或者在启动类上标注@MapperScan(${path}),pathmapper.java类的所在目录(目的是扫描到所需类)

@RequestBody注解不能用在Get方法中

其实这个算网络的知识点,Get请求的参数是通过url方法传递而不是请求体,所以无法用@RequestBody注解接收

解决:

  • 将请求方法转换为Post
  • 使用多个RequestParam接受后拼装成对象
  • 使用@ModelAttribute注解
  • 使用JSON格式接收数据,再转化为对象

对于依赖循环

这个太容易发生了,特别是架构设计没规划好的时候,写着写着就报错了

解决

  1. 使用@Lazy注解,对一个Bean进行延时加载。注入代理,使用时才被完全初始化
  2. Setter/Field注入,实际上依赖没有被注入,只有需要时才被注入
  3. @Autowired注解将required属性设置为false
    等等,不止这些

其实真正合理且符合架构设计准则的是重构,解耦规划

对于依赖循环的底层下次可以好好唠唠

评论