我試圖解決一些RequestMapping
方法的某些參數,從請求主體中提取值並驗證它們並將它們注入特定的註釋參數中。在Spring的HandlerMethodArgumentResolver中,我如何多次讀取請求體?
@Override
public Object resolveArgument(MethodParameter parameter, ModelAndViewContainer mavContainer,
NativeWebRequest webRequest, WebDataBinderFactory binderFactory) throws Exception {
// 1, get corresponding input parameter from NativeWebRequest
// 2, validate
// 3, type convertion and assemble value to return
return null;
}
最大的問題是,我發現,HttpServletRequest
(從NativeWebRequest
獲得)無法讀取輸入流(一些參數是在請求體)一次以上。那麼我怎樣才能多次檢索Inputstream
/Reader
或請求主體?
一個解決方案可能是使用ThreadLocal將請求中的參數存儲在過濾器中,然後在代碼中的任意位置在任意時間使用它們。 –
@SandeepPoonia這可能有幫助。但是一個問題是,如果我將主體保存到threadlocal中(通過調用HttpServletRequest.getReader/getInputStream),將永遠不會再調用它。在控制器層的事件中,我無法聲明「@RequestBody String body」(它可能會在Spring中引發異常),因爲Spring無法再讀取輸入流。 – Kim