Я хочу вернуть код состояния 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)




Вы можете определить @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 в исключение !!!