springMVC 拦截器 @RequestBody BufferedReader? 400 报错
spring MVC controller 中用@RequestBody注解获取json字符串。想加一层拦截器,对请求进行参数验证,于是写了一个拦截器,用BufferedReader br = new BufferedReader(new InputStreamReader(request.getInputStream()));这样的方式来取得请求内容,但是进行br.readline()操作之后,当方法进入controller时,@RequestBody String json ,json就为空...不是null,是空着的....求原因,最好能提供解决方法。谢谢了。下面是具体代码贴图。
流读取了就没了。######回复 @打哭你 :流对应的是数据,数据放在内存中,有的是部分放在内存中。read 一次标记一次当前位置(mark position),第二次read就从标记位置继续读(从内存中copy)数据。 所以这就是为什么读了一次第二次是空了。 怎么让它不为空呢?只要inputstream 中的pos 变成0就可以重写读取当前内存中的数据,但很遗憾,没找到有修改pos 的api。######好像是这样的.....这是为什么呢?百度也搜索不到相关内容######
把拦截器去掉能接收到吗?
为什么不用@RequestParam ?
######json请求.....没用br.read()这个操作就可以接收到...######我的用json数据作为请求数据。接收的时候用@RequestParam Map<String ,Object > map 直接接收######嗯嗯....用@RequestBody好像流读取....读一次就没有了....貌似这样...######既然你用了spring MVC要做数据处理,就利用它的 HttpMessageConverter吧,不要写那种拦截器了。######有一种方式做验证就是通过Aop,对controller的方法做切面。
在切面里面可以拿到方法的参数,
@Around(" **** ") public Object doBasicProfiling(ProceedingJoinPoint pjp) throws Throwable
ProceedingJoinPoint pjp
Object[] args = pjp.getArgs();通过
HttpServletRequest request = ((ServletRequestAttributes) RequestContextHolder.currentRequestAttributes()).getRequest(); HttpServletResponse response = ((ServletRequestAttributes) RequestContextHolder.currentRequestAttributes()).getResponse();可以拿到当前线程使用的request和response再进行校验和处理即可
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。