响应对象以及http状态代码

时间:2018-10-17 07:14:46

标签: java spring rest exception-handling

我想返回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; 
    }
}

2 个答案:

答案 0 :(得分:0)

您可以定义一个@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引发,则调用处理程序方法。

答案 1 :(得分:0)

OrderException中的OrderDetails可能为null ... 因此,使用 exception.setOrderDetails(orderVO); ,您可以在Exception中放入null!