Обработка исключений рекомендаций контроллера ⇐ JAVA
-
Anonymous
Обработка исключений рекомендаций контроллера
В Spring Boot 3 я использую Controller Advice для обработки исключения уникальности базы данных и создания собственного сообщения об ошибке, которое я могу передать в формате JSON и записать в журнал.
Я хотел бы добавить информацию из MethodHandler, чтобы я мог также регистрировать/добавлять в пользовательское сообщение URI и контроллер, в котором возникло исключение.
Вот как это настроено на данный момент:
Контроллер
/** * Обновление автомобиля (PUT) */ @PutMapping(value = "/{id}", потребляет = "application/json") ResponseEntity updateCarDto(@Valid @RequestBody CarCreateDto updateCar, @PathVariable Long id) { CarCreateDto Car = CarService.updateCar(updateCar, id); вернуть новый ResponseEntity(Car, HttpStatus.OK); } } Обработчик исключений
@ExceptionHandler(DataIntegrityViolationException.class) public ResponseEntity dataIntegrityViolantionException (окончательное DataIntegrityViolationException e) { ObjectMapper objectMapper = новый ObjectMapper(); objectMapper.setDateFormat(df); ErrorMessage errorMessage = новое ErrorMessage(); Строка MostSpecificCauseMessage = e.getMostSpecificCause().getMessage(); if (e.getCause().getCause() экземпляр SQLIntegrityConstraintViolationException) { пытаться { Строка jsonMessage = objectMapper.writeValueAsString(errorMessage.builder() .reasonCode(ErrorMessage.ReasonCode.NAME_ALREADY_EXISTS) .message(mostSpecificCauseMessage) .timeStamp(df.format(System.currentTimeMillis())) .строить()); вернуть новый ResponseEntity(jsonMessage, HttpStatus.CONFLICT); } catch (JsonProcessingException ex) { выбросить новое RuntimeException(ex); } } return new ResponseEntity("Неизвестное исключение нарушения целостности данных с сообщением: " +mostSpecificCauseMessage, HttpStatus.UNPROCESSABLE_ENTITY); } Пример очень похож на то, что я хочу сделать, однако он не показывает, как перехватить исключение на контроллере и в соответствующем экземпляре HandlerMethod чтобы я мог добавить:
Class ControllerName = handlerMethod.getMethod().getDeclaringClass(); String MethodName = handlerMethod.getMethod().getName(); Имя контроллера и имя метода для сообщения об ошибке.
Это просто случай добавления try-catch к методу контроллера и передачи HandlerMethod в качестве параметра?
В Spring Boot 3 я использую Controller Advice для обработки исключения уникальности базы данных и создания собственного сообщения об ошибке, которое я могу передать в формате JSON и записать в журнал.
Я хотел бы добавить информацию из MethodHandler, чтобы я мог также регистрировать/добавлять в пользовательское сообщение URI и контроллер, в котором возникло исключение.
Вот как это настроено на данный момент:
Контроллер
/** * Обновление автомобиля (PUT) */ @PutMapping(value = "/{id}", потребляет = "application/json") ResponseEntity updateCarDto(@Valid @RequestBody CarCreateDto updateCar, @PathVariable Long id) { CarCreateDto Car = CarService.updateCar(updateCar, id); вернуть новый ResponseEntity(Car, HttpStatus.OK); } } Обработчик исключений
@ExceptionHandler(DataIntegrityViolationException.class) public ResponseEntity dataIntegrityViolantionException (окончательное DataIntegrityViolationException e) { ObjectMapper objectMapper = новый ObjectMapper(); objectMapper.setDateFormat(df); ErrorMessage errorMessage = новое ErrorMessage(); Строка MostSpecificCauseMessage = e.getMostSpecificCause().getMessage(); if (e.getCause().getCause() экземпляр SQLIntegrityConstraintViolationException) { пытаться { Строка jsonMessage = objectMapper.writeValueAsString(errorMessage.builder() .reasonCode(ErrorMessage.ReasonCode.NAME_ALREADY_EXISTS) .message(mostSpecificCauseMessage) .timeStamp(df.format(System.currentTimeMillis())) .строить()); вернуть новый ResponseEntity(jsonMessage, HttpStatus.CONFLICT); } catch (JsonProcessingException ex) { выбросить новое RuntimeException(ex); } } return new ResponseEntity("Неизвестное исключение нарушения целостности данных с сообщением: " +mostSpecificCauseMessage, HttpStatus.UNPROCESSABLE_ENTITY); } Пример очень похож на то, что я хочу сделать, однако он не показывает, как перехватить исключение на контроллере и в соответствующем экземпляре HandlerMethod чтобы я мог добавить:
Class ControllerName = handlerMethod.getMethod().getDeclaringClass(); String MethodName = handlerMethod.getMethod().getName(); Имя контроллера и имя метода для сообщения об ошибке.
Это просто случай добавления try-catch к методу контроллера и передачи HandlerMethod в качестве параметра?
Мобильная версия