@Component @Configuration public class WebConfig extends WebMvcConfigurerAdapter { Logger logger= LoggerFactory.getLogger(this.getClass()); //使用阿里 FastJson 做爲JSON MessageConverter @Override public void configureMessageConverters(List<HttpMessageConverter<?>> converters) { FastJsonHttpMessageConverter4 converter = new FastJsonHttpMessageConverter4(); FastJsonConfig config = new FastJsonConfig(); config.setSerializerFeatures(SerializerFeature.WriteMapNullValue,//保留空的字段 SerializerFeature.WriteNullStringAsEmpty,//String null -> "" SerializerFeature.WriteNullNumberAsZero);//Number null -> 0 converter.setFastJsonConfig(config); converter.setDefaultCharset(Charset.forName("UTF-8")); converters.add(converter); } //註冊自定義的攔截器 @Override public void addInterceptors(InterceptorRegistry registry) { super.addInterceptors(registry); } //處理業務拋出的異常 在這裏進行統一處理 @Override public void configureHandlerExceptionResolvers(List<HandlerExceptionResolver> exceptionResolvers) { super.configureHandlerExceptionResolvers(exceptionResolvers); exceptionResolvers.add((httpServletRequest, response, o, e) -> { ResultData result=null; if (e instanceof BusinessException){ result= ResultData.makeFailResult(e.getMessage()); logger.error(e.getMessage()); e.printStackTrace(); } if (e instanceof ApiAutheException){ result=ResultData.makeFailResult(-1,e.getMessage()); e.printStackTrace(); logger.error(e.getMessage()); } writeResult(response,result); return new ModelAndView(); }); } //請求跨域 @Override public void addCorsMappings(CorsRegistry registry) { registry.addMapping("/**") .allowedOrigins(CorsConfiguration.ALL) .allowedMethods("GET", "HEAD", "POST","PUT", "DELETE", "OPTIONS"); super.addCorsMappings(registry); } //獲取客戶端的ip private String getClientIpAddress(HttpServletRequest request) { String ip = request.getHeader("x-forwarded-for"); if (ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) { ip = request.getHeader("Proxy-Client-IP"); } if (ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) { ip = request.getHeader("WL-Proxy-Client-IP"); } if (ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) { ip = request.getHeader("HTTP_CLIENT_IP"); } if (ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) { ip = request.getHeader("HTTP_X_FORWARDED_FOR"); } if (ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) { ip = request.getRemoteAddr(); } // 若是是多級代理,那麼取第一個ip爲客戶端ip if (ip != null && ip.contains(",")) { ip = ip.substring(0, ip.indexOf(",")).trim(); } return ip; } private void writeResult(HttpServletResponse response, ResultData result){ response.setCharacterEncoding("UTF-8"); response.setHeader("Content-type", "application/json;charset=UTF-8"); response.setStatus(200); PrintWriter writer=null; try { writer=response.getWriter(); response.getWriter().write(JSON.toJSONString(result)); } catch (IOException ex) { logger.error(ex.getMessage()); }finally { if (writer!=null){ writer.close(); } } } }