java.lang.IllegalStateException: READER问题解决
一 背景
在自测的过程中发现一个问题,在使用@requestBody注解时发现controller接收的request类拿不到body传的json数据,提示错误
二 问题排查
1 检查参数传的和后端的参数类型是否匹配(检验后是匹配的)
2 是不是@requestBody后面的@valid注解有问题,因为接收参数的request类是没有在属性上加上@NotNullExt 等注解,(这个注解的作用是前端传的参数不符合后端参数要求时,返回属性上message的错误信息),比如这个参数后端没有正确拿到,就会抛出message="销售员工ID不能为空"的错误信息
3 是不是某些参数的类型确实对不上(删除只剩下一个属性还是同样的问题)
4 debug发现从body里拿的流数据是null的
5 最后检查发现是因为在拦截器里取了一遍body中的信息,打印参数,方便排查问题
三 问题解决
1 把取body打印日志的逻辑去掉,只打印url和url带的参数信息
2 定义过滤器,重写HttpServletRequestWrapper类的getInputStream方法,这个方法读取存在缓存中
3 具体实现可参考:https://blog.csdn.net/dark_horse_lk/article/details/82344692