在Spring REST响应{Missing

时间:2018-05-15 13:07:17

标签: java spring rest response

在我的 Spring Boot REST应用程序中,我有一个端点,我在那里做了一些事情。在那里,我还有一个@Provider,我可以捕捉并映射在此过程中发生的所有异常:

@Provider
public class GenericExceptionMapper implements ExceptionMapper<Throwable> {
    @Override
    public Response toResponse(Throwable ex) {
        ErrorObject error = new ErrorObject("INTERNAL", 500, ex.getMessage());
        return Response.status(error.getStatus()).entity(error).type(MediaType.APPLICATION_JSON).build();
    }
}

ErrorObject只是一个基本的pojo,包含一些信息:

public class ErrorObject implements Serializable {
    private static final long serialVersionUID = 4181809471936547469L;

    public ErrorObject(String name, int status, String message) {
        this.name = name;
        this.status = status;
        this.message = message;
    }

    private String name;
    private int status;
    private String message;

    setters/getters
}

如果我用postman 调用我的端点,如果发生异常,我得到了这个响应,这很完美:

{
    "name": "INTERNAL",
    "status": 500,
    "message": "something happened",
}

但是当我在我的应用程序中调用端点 时,我抓住了RestClientResponseException(基本上是HttpClientErrorException),我可以在异常中看到它是500,但是没有身体,它是空的。

这就是我在我的应用程序中调用它的方式:

try {
    ResponseEntity<WhateverObject> entity = restTemplate.exchange(url, HttpMethod.POST, getBaseHeadersAsHttpEntity(), WhateverObject.class);
    //...
} catch (RestClientResponseException e) {
    //... ErrorObject of exception is missing here
}

如果出现异常,我怎样才能获得相同的正文,所以我自己的异常错误对象是什么?

1 个答案:

答案 0 :(得分:0)

感谢@Hemant Patel的评论,在尝试设置新的ErrorHandler之后,我发现我唯一需要设置的是新的请求工厂:

restTemplate.setRequestFactory(new HttpComponentsClientHttpRequestFactory());

此工厂能够成功在后台设置响应主体。