全局异常处理
maven引用:
<dependencies> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot</artifactId> <version>2.2.2.RELEASE</version> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-autoconfigure</artifactId> <version>2.2.2.RELEASE</version> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-core</artifactId> <version>5.3.25</version> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-expression</artifactId> <version>5.3.25</version> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-context</artifactId> <version>5.3.25</version> </dependency> <dependency> <groupId>org.springframework.security</groupId> <artifactId>spring-security-core</artifactId> <version>5.7.6</version> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-web</artifactId> <version>5.3.25</version> </dependency> <dependency> <groupId>javax.servlet</groupId> <artifactId>javax.servlet-api</artifactId> <version>4.0.1</version> </dependency> <dependency> <groupId>org.aspectj</groupId> <artifactId>aspectjweaver</artifactId> <version>1.9.19</version> </dependency> <dependency> <groupId>org.projectlombok</groupId> <artifactId>lombok</artifactId> <version>1.18.24</version> </dependency> <dependency> <groupId>com.alibaba</groupId> <artifactId>fastjson</artifactId> <version>2.0.23</version> </dependency> <dependency> <groupId>commons-lang</groupId> <artifactId>commons-lang</artifactId> <version>2.6</version> </dependency> <dependency> <groupId>org.slf4j</groupId> <artifactId>slf4j-api</artifactId> <version>1.7.29</version> </dependency> <dependency> <groupId>javax.annotation</groupId> <artifactId>jsr250-api</artifactId> <version>1.0</version> </dependency> <dependency> <groupId>jakarta.validation</groupId> <artifactId>jakarta.validation-api</artifactId> <version>3.0.2</version> </dependency> </dependencies>
异常处理类:
package com.smy.common.project.common.exception;
import jakarta.validation.ConstraintViolationException;
import lombok.extern.slf4j.Slf4j;
import org.springframework.http.HttpStatus;
import org.springframework.http.ResponseEntity;
import org.springframework.http.converter.HttpMessageConversionException;
import org.springframework.util.StringUtils;
import org.springframework.validation.BindingResult;
import org.springframework.validation.ObjectError;
import org.springframework.web.bind.MethodArgumentNotValidException;
import org.springframework.web.bind.MissingServletRequestParameterException;
import org.springframework.web.bind.annotation.ExceptionHandler;
import org.springframework.web.bind.annotation.RestControllerAdvice;
import org.springframework.web.method.annotation.MethodArgumentTypeMismatchException;
import javax.xml.bind.ValidationException;
/**
* 全局异常处理
*/
@Slf4j
@RestControllerAdvice
public class ExceptionHandlerController {
/**
* 全局异常处理
*
* @param e
* @return
*/
@ExceptionHandler(Throwable.class)
public ResponseEntity handleException(Throwable ex) {
log.error("GlobalException print Throwable :", ex);
return ResponseEntity.status(HttpStatus.BAD_REQUEST).body(ex.getMessage());
}
/**
* IllegalArgumentException异常处理
*
* @param ex
* @return
*/
@ExceptionHandler(IllegalArgumentException.class)
public ResponseEntity handleIllegalArgumentException(IllegalArgumentException ex) {
log.error("GlobalException print Throwable :", ex);
return ResponseEntity.status(HttpStatus.OK).body(ex.getMessage());
}
/**
* HttpMessageConversionException
*
* @param ex
* @return
*/
@ExceptionHandler(HttpMessageConversionException.class)
public ResponseEntity handleHttpMessageConversionException(HttpMessageConversionException ex) {
log.error("GlobalException print HttpMessageConversionException : {}", ex.getMessage());
return ResponseEntity.status(HttpStatus.OK).body(ex.getMessage());
}
/**
* MethodArgumentTypeMismatchException
*
* @param ex
* @return
*/
@ExceptionHandler(MethodArgumentTypeMismatchException.class)
public ResponseEntity handleMethodArgumentTypeMismatchException(MethodArgumentTypeMismatchException ex) {
log.error("GlobalException print MethodArgumentTypeMismatchException : {}", ex.getMessage());
return ResponseEntity.status(HttpStatus.OK).body(ex.getMessage());
}
/**
* @param ex
* @return
*/
@ExceptionHandler(MissingServletRequestParameterException.class)
public ResponseEntity handleMissingServletRequestParameterException(MissingServletRequestParameterException ex) {
log.error("GlobalException print MissingServletRequestParameterException : {}", ex.getMessage());
return ResponseEntity.status(HttpStatus.OK).body(String.format("%s输入不合法", ex.getParameterName()));
}
/**
* 参数验证异常处理
*
* @param ex
* @return
*/
@ExceptionHandler(MethodArgumentNotValidException.class)
public ResponseEntity handleMethodArgumentNotValidException(MethodArgumentNotValidException ex) {
log.debug("GlobalException print MethodArgumentNotValidException :{}" + ex.getMessage());
BindingResult bindingResult = ex.getBindingResult();
StringBuilder stringBuilder = new StringBuilder();
// 只返回一个错误
if (bindingResult.hasErrors()) {
ObjectError firstError = bindingResult.getAllErrors().get(0);
stringBuilder.append(StringUtils.isEmpty(firstError.getDefaultMessage()) ? "param is invalid" : firstError.getDefaultMessage());
}
String errorMessage = stringBuilder.toString();
return ResponseEntity.status(HttpStatus.OK).body(errorMessage);
}
/**
* ValidationException
*/
@ExceptionHandler(ValidationException.class)
public ResponseEntity handleValidationException(ValidationException ex) {
log.error("GlobalException print ValidationException : {}", ex);
return ResponseEntity.status(HttpStatus.OK).body(String.format("字段验证异常:%s", ex.getMessage()));
}
/**
* ConstraintViolationException
*/
@ExceptionHandler(ConstraintViolationException.class)
public ResponseEntity handleConstraintViolationException(ConstraintViolationException ex) {
log.error("GlobalException print ConstraintViolationException : {}", ex);
return ResponseEntity.status(HttpStatus.OK).body(ex.getConstraintViolations().stream().iterator().next().getMessage());
}
}
收藏文章数量从多到少与“把书读薄”是一个道理