Вот некоторые из подходов, которые вы можете использовать для обработки пользовательских исключений.
Создайте POJO для обработки пользовательских сообщений об ошибках и укажите свойства, которые вы хотите вернуть.
public class ErrorResponse {
private String message;
public String getMessage() {
return message;
}
public void setMessage(String message) {
this.message = message;
}
}
Подход 1. Внутри вашего метода Controller.
@RequestMapping("/car/{id}")
public ResponseEntity<?> getCar(@PathVariable String id) {
Car car = carService.getCar(id);
if (car == null) {
ErrorResponse errorResponse = new ErrorResponse();
errorResponse.setMessage("Record not found");
return new ResponseEntity<>(errorResponse, HttpStatus.NOT_FOUND)
}
return new ResponseEntity<>(car, HttpStatus.OK);
}
Подход 2: Обрабатывать исключения глобально.
Шаг 1: Создать класс исключений NotFound ирасширить до RunTime Exception.
public class NoRecordFoundException extends RuntimeException {
public NoRecordFoundException() {
super();
}
}
Шаг 2: Создать обработчик Global Exception
@RestControllerAdvice
public class GlobalExceptionHandler {
@ExceptionHandler(NoRecordFoundException.class)
@ResponseStatus(HttpStatus.NOT_FOUND)
@ResponseBody
public ErrorResponse handleNoRecordFoundException(NoRecordFoundException ex)
{
ErrorResponse errorResponse = new ErrorResponse();
errorResponse.setMessage("No Record Found");
return errorResponse;
}
// То же самое вы можете обработать Exceptionerror для внутреннего
@ExceptionHandler(Exception.class)
@ResponseStatus(HttpStatus.INTERNAL_SERVER_ERROR)
@ResponseBody
public ErrorResponse handleDefaultException(Exception ex) {
ErrorResponse response = new ErrorResponse();
response.setMessage(ex.getMessage());
return response;
}
}
Шаг 3: throw исключение Не найдено из вашего контроллера или службы:
@RequestMapping("/car/{id}")
public ResponseEntity<?> getCar(@PathVariable String id) {
Car car = carService.getCar(id);
if (car == null) {
throw new NoRecordFoundException();
}
return new ResponseEntity<>(car, HttpStatus.OK);
}
Подход 3: Создать @ExceptionHandler
в контроллере и выбросить
@ExceptionHandler(NoRecordFoundException.class)
@ResponseStatus(HttpStatus.NOT_FOUND)
@ResponseBody
public ErrorResponse handleNoRecordFoundException(NoRecordFoundException ex) {
ErrorResponse errorResponse = new ErrorResponse();
errorResponse.setMessage("No Record Found");
return errorResponse;
}