Web 模块
此模块主要处理web相关的配置及处理
跨域配置
@Configuration
public class CorsConfig implements WebMvcConfigurer {
@Override
public void addCorsMappings(CorsRegistry registry) {
registry
// 对所有路径生效
.addMapping("/**")
// 允许所有域名
.allowedOriginPatterns("*")
// 允许的 HTTP 方法
.allowedMethods("GET", "POST", "PUT", "DELETE")
// 允许所有请求头
.allowedHeaders("*")
// 允许携带 Cookie
.allowCredentials(true)
// 预检请求缓存时间(秒)
.maxAge(3600);
}
}全局异常处理
捕获 BaseException 异常,进行统一处理,自定义业务异常需继承 BaseException
@RestControllerAdvice
@Configuration
@Slf4j
public class GlobalExceptionHandle extends StrResponseController {
/**
* 通用业务异常处理
*/
@ExceptionHandler(BaseException.class)
public String handleBaseException(BaseException e) {
log.error(e.getMessage(),e);
return error(e.getResultCodeEnum(), e.getMessage(), e.getData());
}
/**
* 捕获全局spring validation 异常信息
*/
@ExceptionHandler(MethodArgumentNotValidException.class)
public String handleMethodArgumentNotValidException(MethodArgumentNotValidException e) {
String errMessages = e
.getBindingResult()
.getAllErrors()
.stream()
.map(ObjectError::getDefaultMessage)
.distinct()
.collect(Collectors.joining(";"));
return error(ResultCodeEnum.PARAMS_MISSING, errMessages);
}
/**
* 全局捕获直接在controller中校验的 validation 异常信息
*/
@ExceptionHandler(ConstraintViolationException.class)
public String handleConstraintViolationException(ConstraintViolationException e) {
String errMessages = Arrays.stream(e.getMessage().split(","))
.map(item -> item.split(":"))
.filter(item -> item.length > 1)
.map(item -> item[1].trim())
.distinct()
.collect(Collectors.joining(";"));
return error(ResultCodeEnum.PARAMS_MISSING, String.join("、", errMessages));
}
/**
* 处理spring mvc 参数格式异常信息
*/
@ExceptionHandler(HttpMessageNotReadableException.class)
public String handleHttpMessageNotReadableException(HttpMessageNotReadableException e) {
log.error(e.getMessage(),e);
return error(ResultCodeEnum.PARAMS_ERROR,e.getMessage());
}
/**
* 处理404异常
*/
@ExceptionHandler(NoHandlerFoundException.class)
public void handleNoHandlerFoundException(NoHandlerFoundException e) {
log.error(e.getMessage(),e);
WebUtils.renderJson(error(ResultCodeEnum.RESOURCE_NOT_FOUND_ERROR));
}
/**
* 处理405请求方法异常
*/
@ExceptionHandler(HttpRequestMethodNotSupportedException.class)
public void handleHttpRequestMethodNotSupportedException(HttpRequestMethodNotSupportedException e) {
log.error(e.getMessage(),e);
WebUtils.renderJson(error(ResultCodeEnum.REQUEST_METHOD_ERROR));
}
}
