上传信息"/>
用Filter 改造http上传信息
1. 写一个Filter (XxxFilter)继承 OncePerRequestFilter
doFilter方法的第一个参数HttpServletRequest需要自定类重写(如:HttpRequestWrapper继承ContentCachingRequestWrapper)
2. post 请求
1. XxxFilter
2. ServletRequestWrapper:167-getParameterMap()
Request (org.apache.catalina.connector.Request):1143-getParameterMap()
getParameterNames()一parseParameters():读取body等参数然后存储在此类parameterMap中
3.解折RequestBody
RequestResponseBodyMethodProcessor这个类用来解析@RequestBody和@ResponseBody返回值解析
resolveArgument
readwithMessageConverters
readwithMessageConvertersmessage
new EmptyBodyCheckingHttpInputMessage(inputMessage);
InputStream inputStream = inputMessage.getBody();
XxxFilter.getInputStream()--Request.getInputStream()
4. @RequestBody与@RequestParam
@RequestBody对应postman前端上送的raw类型,由Request.getInputStream()获得;
@RequestParam对应postman前端上送的from-data或x-www-form-urlencoded类型, 由Request中的parameterMap中获得;
Request.getInputStream()中注意
1.3241: readPostBody(formData,len)I=len 读取body内容
2.3185: if (usingInputstream II usingReader){
success true;
return;
}
如果调用getInputstream()或getReader()则会usingInputstream或usingReadert改为txue,不在调用3241行的代码读取body内容, ——不可再HttpRequestWrapper的构造函数中调用getInputstream()或getReader()方法
更多推荐
用Filter 改造http上传信息
发布评论