java handler模式,Spring-web-HandlerMethodReturnValueHandler

 2023-10-15 阅读 28 评论 0

摘要:該接口的實例通過RequestMappingHandlerAdapter注冊,在spring boot下通過WebMvcConfigure注冊會導致無效,下面的代碼是無論Controller返回什么值,都會被AppResult類包裝到data字段里 // 吐槽:此處不應該用泛型,因為返回之后,程序員

該接口的實例通過RequestMappingHandlerAdapter注冊,在spring boot下通過WebMvcConfigure注冊會導致無效,下面的代碼是無論Controller返回什么值,都會被AppResult類包裝到data字段里

// 吐槽:此處不應該用泛型,因為返回之后,程序員并不會使用該類,
// 任何在controller中返回值添加泛型的行為都是對設計模式和API不了解
public class AppResult {/*** <li>1:成功</li>* <li>0:業務異常</li>* <li>666:去登錄</li>* <li>-1:系統異常</li>*/private int status;private String message;private String path;private Object data;
}
@Component
public class AppResultHandler implements HandlerMethodReturnValueHandler {@Autowiredprivate RequestMappingHandlerAdapter requestMappingHandlerAdapter;@PostConstructpublic void init() {List<HandlerMethodReturnValueHandler> list = new ArrayList<>();list.add(this);List<HandlerMethodReturnValueHandler> handlers = requestMappingHandlerAdapter.getReturnValueHandlers();if (handlers != null) {list.addAll(handlers);}requestMappingHandlerAdapter.setReturnValueHandlers(list);}@Overridepublic boolean supportsReturnType(MethodParameter returnType) {return true;}@Overridepublic void handleReturnValue(Object returnValue, MethodParameter returnType, ModelAndViewContainer mavContainer, NativeWebRequest webRequest) throws IOException, HttpMediaTypeNotAcceptableException, HttpMessageNotWritableException {AppResult result;if (returnValue != null && AppResult.class.isAssignableFrom(returnValue.getClass())) {result = ((AppResult) returnValue);}// 判斷404else if (returnValue != null && returnValue.getClass() == LinkedHashMap.class) {@SuppressWarnings("unchecked")Map<String, Object> map = ((Map<String, Object>) returnValue);Object status = map.get("status");Integer nf = 404;if (nf.equals(status)) {result = new AppResult();result.setStatus(-1);result.setMessage("請求的URL不存在");result.setPath(String.valueOf(map.get("path")));} else {result = new AppResult();result.setData(returnValue);}} else {result = new AppResult();result.setData(returnValue);}if (result.getMessage() == null) {if (result.getStatus() == 1) {result.setMessage("OK");}//else if (result.getStatus() == 0) {result.setMessage("業務異常");}//else if (result.getStatus() == -1) {result.setMessage("系統異常");}}if (result.getPath() == null) {HttpServletRequest servletRequest = (HttpServletRequest) webRequest.getNativeRequest();result.setPath(servletRequest.getServletPath());}RequestResponseBodyMethodProcessor jsonProcessor = new RequestResponseBodyMethodProcessor(requestMappingHandlerAdapter.getMessageConverters());jsonProcessor.handleReturnValue(result, returnType, mavContainer, webRequest);}
}

版权声明:本站所有资料均为网友推荐收集整理而来,仅供学习和研究交流使用。

原文链接:https://hbdhgg.com/5/137173.html

发表评论:

本站为非赢利网站,部分文章来源或改编自互联网及其他公众平台,主要目的在于分享信息,版权归原作者所有,内容仅供读者参考,如有侵权请联系我们删除!

Copyright © 2022 匯編語言學習筆記 Inc. 保留所有权利。

底部版权信息