Вы можете использовать @ControllerAdvice
для обработки исключений:
Ваша конечная точка должна идентифицировать ошибку и выдать ошибку:
@RequestMapping("/country/{code}")
public ResponseEntity<Country> findCountry(String code) {
Country country = this.countryRepository(code);
if(country == null) throws new IllegalArgumentException("Invalid country code: " + code);
return ResponseEntity.status(200).body(country);
}
Затем вы создаете класс, который будет обрабатывать исключенияиз ваших конечных точек:
@ControllerAdvice
public class RestResponseEntityExceptionHandler extends ResponseEntityExceptionHandler {
@ExceptionHandler(value = { IllegalArgumentException.class })
protected ResponseEntity<Object> handleConflict(RuntimeException ex, WebRequest request) {
String bodyOfResponse = "This should be application specific";
return handleExceptionInternal(ex, bodyOfResponse,
new HttpHeaders(), HttpStatus.CONFLICT, request);
}
}
Там вы должны определить код состояния, чтобы указать пользователю, какая ошибка была сгенерирована, 409, чтобы указать, что произошел конфликт.
Кроме того, вы можете определить тело, включающее дополнительную информацию, либо строку, либо пользовательский объект, содержащий сообщение об ошибке и описание, которое вы предлагаете клиенту через документацию.