Spring-boot предоставляет нам стандартный метод обработки исключений с использованием концепции Spring AOP.Вы можете использовать аннотации @ControllerAdvice
и @Exceptionhandled
для обработки исключений из конечной точки отдыха с пружинной загрузкой, чтобы пользовательское исключение всегда генерировалось из конечной точки отдыха с правильным кодом ошибки и ответом об ошибке.
The @ResponseStatus()
аннотация может использоваться для настройки создаваемого кода ответа.Например, рассмотрим пользовательское исключение:
@ResponseStatus(HttpStatus.NOT_FOUND)
public class DataNotFoundException extends RuntimeException {
public DataNotFoundException(String exception) {
super(exception);
}
}
Мы можем выбросить эту ошибку из сопоставления GET покоя, когда данные не найдены, например:
@GetMapping("/trains/{id}")
public Resource<Student> retrieveTrains(@PathVariable long id) {
Optional<Trains> trains = trainRepository.findById(id);
if (!train.isPresent())
throw new DataNotFoundException("id-" + id);
Resource<Trains> resource = new Resource<Trains>(train.get());
ControllerLinkBuilder linkTo = linkTo(methodOn(this.getClass()).retrieveAllTrains());
resource.add(linkTo.withRel("all-trains"));
return resource;
}
Ответ по умолчанию об ошибке , предоставляемый Spring Boot, содержит все детали, которые обычно необходимы.
Однако вы можете создать независимую от структуры структуру ответа для вашей организации.В этом случае вы можете определить конкретную структуру ответа на ошибку.Например:
public class ErrorDetails {
private Date timestamp;
private String message;
private String details;
public ErrorDetails(Date timestamp, String message, String details) {
super();
this.timestamp = timestamp;
this.message = message;
this.details = details;
}
Чтобы использовать этот узел ошибки, мы используем:
@ControllerAdvice
public class CustomizedResponseEntityExceptionHandler extends ResponseEntityExceptionHandler {
@ExceptionHandler(DataNotFoundException.class)
public final ResponseEntity<ErrorDetails> handleUserNotFoundException(DataNotFoundException ex, WebRequest request) {
ErrorDetails errorDetails = new ErrorDetails(new Date(), ex.getMessage(),
request.getDescription(false));
return new ResponseEntity<>(errorDetails, HttpStatus.NOT_FOUND);
}
@ExceptionHandler(DataNotFoundException.class)
указывает, что этот метод будет обрабатывать исключения определенного типа. new ResponseEntity<>(errorDetails, HttpStatus.NOT_FOUND)
- Создать объект ответа об ошибке и вернуть его с определенным статусом Http.
Для более обобщенного обработчика исключений вы можете определить метод, который обрабатывает исключениетипа Exception.class , , поэтому вам не нужно знать каждое исключение .
Как:
@ExceptionHandler(Exception.class)
public final ResponseEntity<ErrorDetails> handleAllExceptions(Exception ex, WebRequest request) {
ErrorDetails errorDetails = new ErrorDetails(new Date(), ex.getMessage(),
request.getDescription(false));
return new ResponseEntity<>(errorDetails, HttpStatus.INTERNAL_SERVER_ERROR);
}
Ссылка от: https://www.javaguides.net/2019/02/spring-boot-2-angular-7-crud-example-tutorial.html