拦截MethodArgumentNotValidException 这个异常,无法获取到我的自定义信息
时间: 2023-11-22 17:52:41 浏览: 65
自定义异常
5星 · 资源好评率100%
如果您在使用Spring MVC框架时遇到了MethodArgumentNotValidException异常,一般情况下是因为参数校验不通过引起的。在处理这个异常时,您可以通过以下方式来获取自定义信息:
1. 使用@ExceptionHandler注解来处理异常,并在处理方法中获取异常信息。
```java
@ExceptionHandler(MethodArgumentNotValidException.class)
public ResponseEntity<Object> handleMethodArgumentNotValid(MethodArgumentNotValidException ex) {
// 获取错误信息
BindingResult bindingResult = ex.getBindingResult();
List<String> errorList = bindingResult.getFieldErrors().stream()
.map(error -> error.getField() + ": " + error.getDefaultMessage())
.collect(Collectors.toList());
// 封装返回结果
Map<String, Object> result = new HashMap<>();
result.put("code", HttpStatus.BAD_REQUEST.value());
result.put("message", "参数校验失败");
result.put("errors", errorList);
return new ResponseEntity<>(result, HttpStatus.BAD_REQUEST);
}
```
在上述代码中,我们使用@ExceptionHandler注解来捕获MethodArgumentNotValidException异常,并在处理方法中获取了错误信息,并封装成一个Map返回给前端。
2. 自定义参数校验异常,并在异常类中定义自己的错误信息。
```java
public class MyException extends RuntimeException {
private String message;
public MyException(String message) {
this.message = message;
}
@Override
public String getMessage() {
return message;
}
}
```
在上述代码中,我们定义了一个自定义的异常类MyException,并在异常类中定义了自己的错误信息。
然后,在参数校验不通过时,我们可以抛出MyException异常,并传入自定义的错误信息。
```java
public void test(@Valid User user, BindingResult result) {
if (result.hasErrors()) {
String message = result.getFieldErrors().stream()
.map(error -> error.getField() + ": " + error.getDefaultMessage())
.collect(Collectors.joining(", "));
throw new MyException(message);
}
// do something
}
```
在上述代码中,我们在参数校验不通过时,抛出了MyException异常,并把错误信息传入了异常构造函数中。
这样,在处理这个异常时,就可以直接获取到自定义的错误信息了。
阅读全文