使用ResponseBuilder时,Jersey JAX-RS MessageException

时间:2013-09-26 14:30:43

标签: exception jersey jax-rs

当我在我的服务中抛出一个WebApplicationException时,我会得到一个404响应代码,这正是我所期待的

throw new WebApplicationException(Response.Status.NOT_FOUND);

当我尝试通过ResponseBuilder在我的异常中添加更多信息时,我得到了500响应代码。这是我的增强代码和我得到的响应消息:

List<Error> errors = new ArrayList<>();
errors.add(new Error(ErrorCode.PDF_GENERATION_ERROR));
ErrorResponse errResponse = new ErrorResponse();
errResponse.setErrors(errors);
throw new WebApplicationException(Response.status(Response.Status.NOT_FOUND).entity(errResponse).build());
  

javax.ws.rs.WebApplicationException:   com.sun.jersey.api.MessageExceptio n:Java的消息体编写器   class idexx.ordering.rest.common.types.ErrorRe sponse,以及Java类型   class idexx.ordering.rest.common.types.ErrorResponse和MIME媒体   类型application / octet-stream未找到

我的REST服务具有以下方法签名:

@Produces("application/pdf")
@GET
@Path("/{id}")
public Response getPdfById(@PathParam("id") final Long id) {

无论如何,当我抛出WebApplicationException时,我可以在响应中获得额外的错误代码信息吗?

1 个答案:

答案 0 :(得分:0)

试试这个:

String errResponse = "convert your errors to text";
throw new WebApplicationException(Response.status(Response.Status.NOT_FOUND).entity(errResponse).build());

这可能会有效,因为JAX-RS可以转换基本类型,但要转换List<Error>,您需要注册自定义MessageBodyWriter