因为项目的需要,要对反会的值进行处理,我使用的 spring @ControllerAdvice 注解进行处理
以前的接口有一部分是返回string,所以要进行兼容
package com.threeti.danfoss.base.interceptor;import javax.servlet.http.HttpServletRequest;import org.springframework.core.MethodParameter;import org.springframework.http.MediaType;import org.springframework.http.converter.HttpMessageConverter;import org.springframework.http.server.ServerHttpRequest;import org.springframework.http.server.ServerHttpResponse;import org.springframework.http.server.ServletServerHttpRequest;import org.springframework.web.bind.annotation.ControllerAdvice;import org.springframework.web.servlet.mvc.method.annotation.ResponseBodyAdvice;import org.springframework.web.servlet.support.RequestContext;import com.threeti.danfoss.base.entity.XaResult;@ControllerAdvice(basePackages ={"com.threeti.danfoss.base.controller","com.threeti.danfoss.business.controller"})public class MyResponseBodyAdvice implements ResponseBodyAdvice<Object> {@Overridepublic boolean supports(MethodParameter returnType, Class<? extends HttpMessageConverter<?>> converterType) {//获取当前处理请求的controller的方法//String methodName=returnType.getMethod().getName(); /*// 不拦截/不需要处理返回值 的方法String method= "loginCheck"; //如登录//不拦截if(method.equals(methodName)){return false;}*/ return true;}/*@Overridepublic T beforeBodyWrite(T body, MethodParameter returnType, MediaType selectedContentType,Class<? extends HttpMessageConverter<?>> selectedConverterType, ServerHttpRequest request,ServerHttpResponse response) {// TODO Auto-generated method stubreturn null;}*/@Overridepublic Object beforeBodyWrite(Object body, MethodParameter returnType, MediaType selectedContentType,Class<? extends HttpMessageConverter<?>> selectedConverterType, ServerHttpRequest request,ServerHttpResponse response) {if(body instanceof XaResult){XaResult xr = (XaResult) body;String message = xr.getMessage();//获取messageServletServerHttpRequest req = (ServletServerHttpRequest) request;HttpServletRequest httpReq = req.getServletRequest();RequestContext myreq = new RequestContext(httpReq);try{if(xr.getMsgParams() == null){message = myreq.getMessage(message);}else{message = myreq.getMessage(message,xr.getMsgParams());}}catch(Exception e){message=myreq.getMessage("defined");}xr.setMessage(message);return xr;}else{return String.valueOf(body);}}}
因为做的 接口大部分是用定义的对象 XaResult 返回
@ResponseBody@RequestMapping(value="findProductCodeByStation",method=RequestMethod.POST)public XaResult<List<ProductCode>> findProductCodeByStation(@RequestParam(value = "station") String station,HttpServletRequest request) throws BusinessException{//Long userId = WebUitl.getCmsLoginedUserId(request);return productCodeService.findProductCodeByStation(station);}
0 0