- 自定义异常类
首先,我们需要定义一个自定义异常类,用来处理我们所需要抛出的异常情况。该自定义异常类需要继承RuntimeException或其子类,如IllegalArgumentException等。在自定义异常类中,我们可以添加一些额外的信息字段,以方便我们在异常处理时获取更加详细的异常信息。
下面是一个自定义异常类的示例代码:
public class UserNotFoundException extends RuntimeException {
private Long id;
public UserNotFoundException(Long id) {
super("User not found with id " + id);
this.id = id;
}
public Long getId() {
return id;
}
}
在这个示例代码中,我们定义了一个名为UserNotFoundException的自定义异常类。该异常类继承了RuntimeException类,并添加了一个id字段,用来存储异常的id信息。在构造函数中,我们调用了super()方法,传递了异常信息的字符串形式,表示异常信息为“User not found with id XX”,其中XX为传递给构造函数的id值。
- 自定义异常处理类
接下来,我们需要定义一个自定义的异常处理类,用来处理我们自定义的异常。在Spring Boot中,我们可以通过实现ErrorController或实现Spring Boot的ErrorAttributes接口来自定义异常处理逻辑。
下面是ErrorAttributes接口的示例代码:
@Component
public class CustomErrorAttributes implements ErrorAttributes {
@Override
public Map<String, Object> getErrorAttributes(ServerRequest request, ErrorAttributeOptions options) {
Map<String, Object> errorAttributes = super.getErrorAttributes(request, options);
Throwable throwable = getError(request);
if (throwable instanceof UserNotFoundException) {
UserNotFoundException ex = (UserNotFoundException) throwable;
errorAttributes.put("message", ex.getMessage());
errorAttributes.put("id", ex.getId());
}
return errorAttributes;
}
}
在这个示例代码中,我们定义了一个名为CustomErrorAttributes的自定义异常处理类,并实现了Spring Boot的ErrorAttributes接口。在getErrorAttributes()方法中,我们首先调用了super.getErrorAttributes()方法,获取默认错误属性的Map形式。然后,我们通过getError()方法获取发生异常的Throwable对象,在判断该Throwable对象是否为UserNotFoundException类型。如果是UserNotFoundException类型,我们则将该异常的message和id信息添加到错误属性的Map对象中,最后返回该Map对象即可。
- 抛出自定义异常
最后,我们可以在代码中抛出我们自定义的异常。在Spring Boot中,我们可以使用@ControllerAdvice注解和@ExceptionHandler注解来处理异常情况。
下面是一个@ControllerAdvice注解的示例代码:
@ControllerAdvice
public class UserExceptionHandler {
@ExceptionHandler(UserNotFoundException.class)
public ResponseEntity<Map<String, Object>> handleUserNotFoundException(UserNotFoundException ex) {
Map<String, Object> errorAttributes = new HashMap<>();
errorAttributes.put("status", HttpStatus.NOT_FOUND.value());
errorAttributes.put("error", HttpStatus.NOT_FOUND.getReasonPhrase());
errorAttributes.put("timestamp", LocalDateTime.now().toString());
errorAttributes.put("message", ex.getMessage());
errorAttributes.put("id", ex.getId());
return new ResponseEntity<>(errorAttributes, HttpStatus.NOT_FOUND);
}
}
在这个示例代码中,我们使用@ControllerAdvice注解,表示该类是一个全局异常处理类。在类中使用@ExceptionHandler注解,接受一个UserNotFoundException类型的参数,表示该方法用于处理UserNotFoundException异常。在方法中,我们创建一个Map对象,用来保存错误信息。然后将异常的status、error、timestamp、message和id信息添加到Map对象中,最后使用ResponseEntity类封装Map对象和状态码,返回结果即可。
另外,我们也可以使用@RestControllerAdvice注解接受JSON格式的异常返回值,如下所示:
@RestControllerAdvice
public class UserExceptionHandler {
@ExceptionHandler(UserNotFoundException.class)
public ResponseEntity<Map<String, Object>> handleUserNotFoundException(UserNotFoundException ex) {
Map<String, Object> errorAttributes = new HashMap<>();
errorAttributes.put("status", HttpStatus.NOT_FOUND.value());
errorAttributes.put("error", HttpStatus.NOT_FOUND.getReasonPhrase());
errorAttributes.put("timestamp", LocalDateTime.now().toString());
errorAttributes.put("message", ex.getMessage());
errorAttributes.put("id", ex.getId());
return new ResponseEntity<>(errorAttributes, HttpStatus.NOT_FOUND);
}
}
以上就是Spring Boot如何实现自定义异常数据的完整攻略。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:Springboot如何实现自定义异常数据 - Python技术站