Объект ответа вместе с кодом состояния http

Я хочу вернуть код состояния http вместе с объектом ответа. Если я просто верну объект ответа в сценарии сбоя, статус будет возвращен как 200. Но я хочу отправить статус, который возвращается службой (например: 403) вместе с объектом ответа. Но нижеприведенный фрагмент кода просто возвращает сообщение вместе со статусом. Мне нужен объект ответа в этом случае объект orderdetails, у которого есть причины сбоя и другие поля. любая помощь, как передать объект обратно клиенту?

@Component
public class OrderController {

@Autowired
private OrderService service;

    public OrderDetails createOrder(final OrderDetails orderVO) {
        try {
            OrderDetails orderVO = service.createOrder() // service call
        } catch(OrderException e) {
            OrderDetails orderVO = e.getOrderDetails(); // even in exception cases backend liberary sends same object with error messages        
            ServiceException exception = new ServiceException(e.getStatus(), e.getMessage());
            exception.setOrderDetails(orderVO);
            throw exception;
        }
        return orderVO; 
    }
}

Чтобы получить более подробную информацию о ссылке JB Nizet, поищите ResponseEntity или методологии обработки исключений (например, аннотацию ExceptionHandler)

LppEdd 17.10.2018 09:19
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
В компьютерном программировании биты играют важнейшую роль в представлении и манипулировании данными на двоичном уровне. Побитовые операции...
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Приходилось ли вам сталкиваться с требованиями, в которых вас могли попросить поднять тревогу или выдать ошибку, когда метод Java занимает больше...
Полный курс Java для разработчиков веб-сайтов и приложений
Полный курс Java для разработчиков веб-сайтов и приложений
Получите сертификат Java Web и Application Developer, используя наш курс.
0
2
416
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Ответ принят как подходящий

Вы можете определить @ControllerAdvice и добавить туда свою логику обработки ошибок.

@ControllerAdvice
public class SampleControllerAdvice {

     @ExceptionHandler(ServiceException.class)
     public ResponseEntity<YourResponse> handleServiceException(ServiceException e) {
         // YourResponse could be any serializable type (including ServiceException)
         YourResponse body = ...
         // Set the desired HTTP response headers
         HttpHeaders responseHeaders = ...
         // Set the desired HTTP response status
         HttpStatus status = ...
         return new ResponseEntity<YourResponse>(body, headers, status);
     }

}

Если ServiceException получает выбросы, вызывается метод обработчика.

Вероятно, OrderDetails в OrderException имеет значение null ... Таким образом, с exception.setOrderDetails (orderVO); вы помещаете null в исключение !!!

Другие вопросы по теме