diff --git a/src/main/java/com/company/project/configurer/MybatisConfigurer.java b/src/main/java/com/company/project/configurer/MybatisConfigurer.java index 0d6487d86..37ff31e58 100644 --- a/src/main/java/com/company/project/configurer/MybatisConfigurer.java +++ b/src/main/java/com/company/project/configurer/MybatisConfigurer.java @@ -4,16 +4,12 @@ import org.apache.ibatis.plugin.Interceptor; import org.apache.ibatis.session.SqlSessionFactory; import org.mybatis.spring.SqlSessionFactoryBean; -import org.springframework.beans.factory.annotation.Qualifier; -import org.springframework.boot.autoconfigure.AutoConfigureAfter; import org.springframework.context.annotation.Bean; -import org.springframework.context.annotation.Conditional; import org.springframework.context.annotation.Configuration; import org.springframework.core.io.support.PathMatchingResourcePatternResolver; import org.springframework.core.io.support.ResourcePatternResolver; import tk.mybatis.spring.mapper.MapperScannerConfigurer; -import javax.annotation.Resource; import javax.sql.DataSource; import java.util.Properties; diff --git a/src/main/java/com/company/project/configurer/WebMvcConfigurer.java b/src/main/java/com/company/project/configurer/WebMvcConfigurer.java index c9460d3fc..9acfb0f5c 100644 --- a/src/main/java/com/company/project/configurer/WebMvcConfigurer.java +++ b/src/main/java/com/company/project/configurer/WebMvcConfigurer.java @@ -1,21 +1,9 @@ package com.company.project.configurer; -import java.io.IOException; -import java.nio.charset.Charset; -import java.util.ArrayList; -import java.util.Arrays; -import java.util.Collections; -import java.util.List; - -import javax.servlet.ServletException; -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; - import com.alibaba.fastjson.JSON; import com.alibaba.fastjson.serializer.SerializerFeature; import com.alibaba.fastjson.support.config.FastJsonConfig; import com.alibaba.fastjson.support.spring.FastJsonHttpMessageConverter; - import com.company.project.core.Result; import com.company.project.core.ResultCode; import com.company.project.core.ServiceException; @@ -31,17 +19,26 @@ import org.springframework.web.servlet.HandlerExceptionResolver; import org.springframework.web.servlet.ModelAndView; import org.springframework.web.servlet.NoHandlerFoundException; -import org.springframework.web.servlet.config.annotation.CorsRegistry; import org.springframework.web.servlet.config.annotation.InterceptorRegistry; import org.springframework.web.servlet.config.annotation.WebMvcConfigurerAdapter; import org.springframework.web.servlet.handler.HandlerInterceptorAdapter; +import javax.servlet.ServletException; +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; +import java.io.IOException; +import java.nio.charset.StandardCharsets; +import java.util.ArrayList; +import java.util.Collections; +import java.util.List; + /** * Spring MVC 配置 */ @Configuration public class WebMvcConfigurer extends WebMvcConfigurerAdapter { + public static final String UNKNOWN = "unknown"; private final Logger logger = LoggerFactory.getLogger(WebMvcConfigurer.class); @Value("${spring.profiles.active}") private String env;//当前激活的配置文件 @@ -57,8 +54,8 @@ public void configureMessageConverters(List> converters) // 按需配置,更多参考FastJson文档哈 converter.setFastJsonConfig(config); - converter.setDefaultCharset(Charset.forName("UTF-8")); - converter.setSupportedMediaTypes(Arrays.asList(MediaType.APPLICATION_JSON_UTF8)); + converter.setDefaultCharset(StandardCharsets.UTF_8); + converter.setSupportedMediaTypes(Collections.singletonList(MediaType.APPLICATION_JSON_UTF8)); converters.add(converter); } @@ -66,44 +63,35 @@ public void configureMessageConverters(List> converters) //统一异常处理 @Override public void configureHandlerExceptionResolvers(List exceptionResolvers) { - exceptionResolvers.add(new HandlerExceptionResolver() { - public ModelAndView resolveException(HttpServletRequest request, HttpServletResponse response, Object handler, Exception e) { - Result result = new Result(); - if (e instanceof ServiceException) {//业务失败的异常,如“账号或密码错误” - result.setCode(ResultCode.FAIL).setMessage(e.getMessage()); - logger.info(e.getMessage()); - } else if (e instanceof NoHandlerFoundException) { - result.setCode(ResultCode.NOT_FOUND).setMessage("接口 [" + request.getRequestURI() + "] 不存在"); - } else if (e instanceof ServletException) { - result.setCode(ResultCode.FAIL).setMessage(e.getMessage()); + exceptionResolvers.add((request, response, handler, e) -> { + Result result = new Result(); + if (e instanceof ServiceException) {//业务失败的异常,如“账号或密码错误” + result.setCode(ResultCode.FAIL).setMessage(e.getMessage()); + logger.info(e.getMessage()); + } else if (e instanceof NoHandlerFoundException) { + result.setCode(ResultCode.NOT_FOUND).setMessage("接口 [" + request.getRequestURI() + "] 不存在"); + } else if (e instanceof ServletException) { + result.setCode(ResultCode.FAIL).setMessage(e.getMessage()); + } else { + result.setCode(ResultCode.INTERNAL_SERVER_ERROR).setMessage("接口 [" + request.getRequestURI() + "] 内部错误,请联系管理员"); + String message; + if (handler instanceof HandlerMethod) { + HandlerMethod handlerMethod = (HandlerMethod) handler; + message = String.format("接口 [%s] 出现异常,方法:%s.%s,异常摘要:%s", + request.getRequestURI(), + handlerMethod.getBean().getClass().getName(), + handlerMethod.getMethod().getName(), + e.getMessage()); } else { - result.setCode(ResultCode.INTERNAL_SERVER_ERROR).setMessage("接口 [" + request.getRequestURI() + "] 内部错误,请联系管理员"); - String message; - if (handler instanceof HandlerMethod) { - HandlerMethod handlerMethod = (HandlerMethod) handler; - message = String.format("接口 [%s] 出现异常,方法:%s.%s,异常摘要:%s", - request.getRequestURI(), - handlerMethod.getBean().getClass().getName(), - handlerMethod.getMethod().getName(), - e.getMessage()); - } else { - message = e.getMessage(); - } - logger.error(message, e); + message = e.getMessage(); } - responseResult(response, result); - return new ModelAndView(); + logger.error(message, e); } - + responseResult(response, result); + return new ModelAndView(); }); } - //解决跨域问题 - @Override - public void addCorsMappings(CorsRegistry registry) { - //registry.addMapping("/**"); - } - //添加拦截器 @Override public void addInterceptors(InterceptorRegistry registry) { @@ -152,7 +140,7 @@ private boolean validateSign(HttpServletRequest request) { if (StringUtils.isEmpty(requestSign)) { return false; } - List keys = new ArrayList(request.getParameterMap().keySet()); + List keys = new ArrayList<>(request.getParameterMap().keySet()); keys.remove("sign");//排除sign参数 Collections.sort(keys);//排序 @@ -171,23 +159,23 @@ private boolean validateSign(HttpServletRequest request) { private String getIpAddress(HttpServletRequest request) { String ip = request.getHeader("x-forwarded-for"); - if (ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) { + if (ip == null || ip.length() == 0 || UNKNOWN.equalsIgnoreCase(ip)) { ip = request.getHeader("Proxy-Client-IP"); } - if (ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(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)) { + if (ip == null || ip.length() == 0 || UNKNOWN.equalsIgnoreCase(ip)) { ip = request.getHeader("HTTP_CLIENT_IP"); } - if (ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(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)) { + if (ip == null || ip.length() == 0 || UNKNOWN.equalsIgnoreCase(ip)) { ip = request.getRemoteAddr(); } // 如果是多级代理,那么取第一个ip为客户端ip - if (ip != null && ip.indexOf(",") != -1) { + if (ip != null && ip.contains(",")) { ip = ip.substring(0, ip.indexOf(",")).trim(); } diff --git a/src/main/java/com/company/project/core/AbstractService.java b/src/main/java/com/company/project/core/AbstractService.java index 35dbf8201..4df2b7eb9 100644 --- a/src/main/java/com/company/project/core/AbstractService.java +++ b/src/main/java/com/company/project/core/AbstractService.java @@ -19,7 +19,7 @@ public abstract class AbstractService implements Service { private Class modelClass; // 当前泛型真实类型的Class - public AbstractService() { + protected AbstractService() { ParameterizedType pt = (ParameterizedType) this.getClass().getGenericSuperclass(); modelClass = (Class) pt.getActualTypeArguments()[0]; } diff --git a/src/main/java/com/company/project/core/ProjectConstant.java b/src/main/java/com/company/project/core/ProjectConstant.java index 76d6abe4c..840997790 100644 --- a/src/main/java/com/company/project/core/ProjectConstant.java +++ b/src/main/java/com/company/project/core/ProjectConstant.java @@ -13,4 +13,7 @@ public final class ProjectConstant { public static final String CONTROLLER_PACKAGE = BASE_PACKAGE + ".web";//生成的Controller所在包 public static final String MAPPER_INTERFACE_REFERENCE = BASE_PACKAGE + ".core.Mapper";//Mapper插件基础接口的完全限定名 + + private ProjectConstant() { + } } diff --git a/src/main/java/com/company/project/core/ResultGenerator.java b/src/main/java/com/company/project/core/ResultGenerator.java deleted file mode 100644 index 863d73aa6..000000000 --- a/src/main/java/com/company/project/core/ResultGenerator.java +++ /dev/null @@ -1,27 +0,0 @@ -package com.company.project.core; - -/** - * 响应结果生成工具 - */ -public class ResultGenerator { - private static final String DEFAULT_SUCCESS_MESSAGE = "SUCCESS"; - - public static Result genSuccessResult() { - return new Result() - .setCode(ResultCode.SUCCESS) - .setMessage(DEFAULT_SUCCESS_MESSAGE); - } - - public static Result genSuccessResult(T data) { - return new Result() - .setCode(ResultCode.SUCCESS) - .setMessage(DEFAULT_SUCCESS_MESSAGE) - .setData(data); - } - - public static Result genFailResult(String message) { - return new Result() - .setCode(ResultCode.FAIL) - .setMessage(message); - } -}