Commit 146ded71 by 丁伟峰

继续test

1 parent dc1b5931
package com.alibaba.cloud.integration.order.controller;
import com.alibaba.cloud.integration.common.Result;
import lombok.extern.slf4j.Slf4j;
import org.springframework.context.support.DefaultMessageSourceResolvable;
import org.springframework.http.HttpStatus;
import org.springframework.http.ResponseEntity;
import org.springframework.validation.BindException;
import org.springframework.validation.FieldError;
import org.springframework.validation.ObjectError;
import org.springframework.web.bind.MethodArgumentNotValidException;
import org.springframework.web.bind.annotation.ExceptionHandler;
import org.springframework.web.bind.annotation.RestControllerAdvice;
import javax.validation.ConstraintViolation;
import javax.validation.ConstraintViolationException;
import java.util.ArrayList;
import java.util.List;
import java.util.Set;
import java.util.stream.Collectors;
@Slf4j
@RestControllerAdvice
public class GlobalExceptionHandler {
private static final String BAD_REQUEST_MSG = "参数检验不通过";
//处理 form data方式调用接口校验失败抛出的异常
@ExceptionHandler(BindException.class)
public Result<?> bindExceptionHandler(BindException e) {
List<FieldError> fieldErrors = e.getBindingResult().getFieldErrors();
List<String> collect = fieldErrors.stream().map(DefaultMessageSourceResolvable::getDefaultMessage).collect(Collectors.toList());
return Result.failed(String.join(";", collect));
@ExceptionHandler(MethodArgumentNotValidException.class)
public ResponseEntity<ErrorResponse> handleValidationException(MethodArgumentNotValidException ex) {
List<String> errors = new ArrayList<>();
for (FieldError error : ex.getBindingResult().getFieldErrors()) {
errors.add(error.getDefaultMessage());
}
ErrorResponse errorResponse = new ErrorResponse(HttpStatus.BAD_REQUEST, "Validation failed", errors);
return ResponseEntity.badRequest().body(errorResponse);
}
// 处理 json 请求体调用接口校验失败抛出的异常
@ExceptionHandler(MethodArgumentNotValidException.class)
public Result<?> methodArgumentNotValidExceptionHandler(MethodArgumentNotValidException e) {
List<FieldError> fieldErrors = e.getBindingResult().getFieldErrors();
List<String> collect = fieldErrors.stream().map(DefaultMessageSourceResolvable::getDefaultMessage).collect(Collectors.toList());
return Result.failed(String.join(";", collect));
@ExceptionHandler(BindException.class)
public ResponseEntity<ErrorResponse> handleBindException(BindException ex) {
List<String> errors = new ArrayList<>();
for (ObjectError error : ex.getBindingResult().getAllErrors()) {
errors.add(error.getDefaultMessage());
}
ErrorResponse errorResponse = new ErrorResponse(HttpStatus.BAD_REQUEST, "Binding failed", errors);
return ResponseEntity.badRequest().body(errorResponse);
}
// 处理单个参数校验失败抛出的异常
@ExceptionHandler(ConstraintViolationException.class)
public Result<?> constraintViolationExceptionHandler(ConstraintViolationException e) {
Set<ConstraintViolation<?>> constraintViolations = e.getConstraintViolations();
List<String> collect = constraintViolations.stream().map(ConstraintViolation::getMessage).collect(Collectors.toList());
return Result.failed(String.join(";", collect));
// 其他异常处理方法...
// 定义错误响应类
private static class ErrorResponse {
private final int status;
private final String message;
private final List<String> errors;
public ErrorResponse(HttpStatus status, String message, List<String> errors) {
this.status = status.value();
this.message = message;
this.errors = errors;
}
// 处理以上处理不了的其他异常
@ExceptionHandler(Exception.class)
public Result<?> exceptionHandler(Exception e) {
return Result.failed(e.toString());
// 省略 getter 方法...
}
}
Markdown is supported
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!