您好,登錄后才能下訂單哦!
這篇文章主要介紹“SpringMVC MethodArgumentResolver的作用與實現方法是什么”的相關知識,小編通過實際案例向大家展示操作過程,操作方法簡單快捷,實用性強,希望這篇“SpringMVC MethodArgumentResolver的作用與實現方法是什么”文章能幫助大家解決問題。
在Spring MVC中,當一個控制器方法執行完成后,它會返回一個數據對象,這個數據對象可以是任何類型,如對象、集合、數組、字符串等等。MethodReturnValueHandler 就是負責將這個數據對象轉換為HTTP響應的。
在Spring MVC中,MethodReturnValueHandler 是一個接口,它有多個實現類,每個實現類都可以處理不同類型的數據對象。下面是一個簡單的 MethodReturnValueHandler 的實現類示例:
public class MyReturnValueHandler implements MethodReturnValueHandler { @Override public boolean supportsReturnType(MethodParameter returnType) { return returnType.getParameterType().equals(MyData.class); } @Override public void handleReturnValue(Object returnValue, MethodParameter returnType, ModelAndViewContainer mavContainer, NativeWebRequest webRequest) throws Exception { MyData myData = (MyData) returnValue; // do something with myData HttpServletResponse response = webRequest.getNativeResponse(HttpServletResponse.class); response.getWriter().write("hello world"); } }
這個實現類可以將 MyData 類型的數據對象轉換為 HTTP 響應。
supportsReturnType 方法用于判斷該實現類是否支持處理指定類型的返回值。
handleReturnValue 方法用于將數據對象轉換為 HTTP 響應。
在Spring MVC中,MethodReturnValueHandler 由 RequestMappingHandlerAdapter 類負責管理。
RequestMappingHandlerAdapter 會維護一個 MethodReturnValueHandler 列表,當控制器方法執行完成后,它會遍歷這個列表,找到第一個支持處理當前返回值類型的 MethodReturnValueHandler,并調用它的 handleReturnValue 方法。
public class RequestMappingHandlerAdapter extends AbstractHandlerMethodAdapter { private final List<MethodReturnValueHandler> returnValueHandlers = new ArrayList<>(); @Override public void afterPropertiesSet() { super.afterPropertiesSet(); this.returnValueHandlers.add(new MyReturnValueHandler()); } @Override public boolean supportsReturnType(MethodParameter returnType) { for (MethodReturnValueHandler handler : this.returnValueHandlers) { if (handler.supportsReturnType(returnType)) { return true; } } return false; } @Override protected ModelAndView handleInternal(HttpServletRequest request, HttpServletResponse response, HandlerMethod handlerMethod) throws Exception { Object returnValue = handlerMethod.getMethod().invoke(handlerMethod.getBean(), handlerMethod.getMethodParameters()); MethodParameter returnType = handlerMethod.getReturnType(); for (MethodReturnValueHandler handler : this.returnValueHandlers) { if (handler.supportsReturnType(returnType)) { ModelAndViewContainer mavContainer = new ModelAndViewContainer(); handler.handleReturnValue(returnValue, returnType, mavContainer, new ServletWebRequest(request, response)); return mavContainer.getModelAndView(); } } return null; } }
在 RequestMappingHandlerAdapter 的 afterPropertiesSet 方法中,我們可以向returnValueHandlers 列表中添加自定義的 MethodReturnValueHandler 實現類。
supportsReturnType 方法用于判斷當前返回值類型是否有對應的 MethodReturnValueHandler實 現類可以處理。
handleInternal 方法會在控制器方法執行完成后調用,它會根據返回值類型查找對應的 MethodReturnValueHandler 實現類,并調用它的 handleReturnValue 方法將數據對象轉換為HTTP響應。
關于“SpringMVC MethodArgumentResolver的作用與實現方法是什么”的內容就介紹到這里了,感謝大家的閱讀。如果想了解更多行業相關的知識,可以關注億速云行業資訊頻道,小編每天都會為大家更新不同的知識點。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。