У меня есть служба REST, где мне нужно отправить соответствующие коды состояния с пользовательским ответом json, который объясняет причину ошибки.
У меня есть класс @Controller, который предоставляет сервис / тест, и при запуске сервиса выдает пользовательское исключение (расширяет класс Exception)
У меня есть класс @ControllerAdvice, который обрабатывает исключение,Однако всякий раз, когда я получаю ошибку, я не получаю ответ json, вместо этого выводится трассировка стека.
Проверил блоги и попробовал решения.Однако не мог получить это решено.
@ControllerAdvice(basePackages = "com.test")
public class ResponseExceptionHandler extends ResponseEntityExceptionHandler{
@ExceptionHandler(value= {MyException.class})
@ResponseStatus(code=HttpStatus.INTERNAL_SERVER_ERROR)
@ResponseBody
ResponseEntity<MyResponse> commonServiceException(MyException ex) {
MyResponse errors = new MyResponse();
errors.setTimeStamp(LocalDateTime.now());
errors.setErrorCode(ex.getErrorCode());
errors.setErrorMessage(ex.getMessage());
errors.setStatus(HttpStatus.INTERNAL_SERVER_ERROR.getReasonPhrase());
errors.setStatusCode(HttpStatus.INTERNAL_SERVER_ERROR.value());
return new ResponseEntity<>(errors, HttpStatus.INTERNAL_SERVER_ERROR);
}
}
СЕРВИС
@Controller
....
public class test{
..
@GET
@Path("/test")
//@ExceptionHandler(value= {MyException.class})
@Produces(MediaType.APPLICATION_JSON)
public String test() throws MyException{
throw new MyException("123", "message");
}
context.xml
<context:component-scan base-package=" com.test">
<context:include-filter type="annotation"
expression="org.springframework.web.bind.annotation.ControllerAdvice" />
</context:component-scan>
Ожидаемый: Ответ JSON
Факт: Типовой отчет об исключении
Служба сообщений в настоящее время недоступна.Код ошибки: ошибка приложения.Ошибка
Описание Сервер обнаружил непредвиденное состояние, которое не позволило ему выполнить запрос.
Исключение
com.test.MyException: Служба в настоящее время недоступна.Код ошибки: Ошибка приложения ..............................