Jersey JAX-RS MessageException when using a ResponseBuilder



当我在我的服务中抛出一个WebApplicationException时,如下所示,我得到一个404响应代码,这就是我所期望的

throw new WebApplicationException(Response.Status.NOT_FOUND);

当我尝试通过响应生成器在异常中放置更多信息时,我得到一个 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, and Java type class idexx.ordering.rest.common.types.ErrorResponse 和 MIME media 找不到类型应用程序/八位字节流

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

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

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

试试这个:

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

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

最新更新