該接口的實例通過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);}
}
版权声明:本站所有资料均为网友推荐收集整理而来,仅供学习和研究交流使用。
工作时间:8:00-18:00
客服电话
电子邮件
admin@qq.com
扫码二维码
获取最新动态