ResponseBuilder与实体对象一起使用时不起作用



我正在尝试使用responsebuilder创建一个响应。当我在实体中传递字符串时,它工作正常,但当我传递一些错误类时,它不工作。

这是代码

1) 工作良好

Response.status(400).entity("test").build();

2) 不工作

Response.status(400).entity(new MyCustomExceptions(400,"My bad request")).build();

用上面的代码我得到错误

org.glassfish.jersey.message.internal.WriterInterceptorExecutor$TerminalWriterInterceptor aroundWriteTo
SEVERE: MessageBodyWriter not found for media type=text/plain

当我用上面的代码调用这个服务时,我得到的错误是500,而不是400。但在第一种情况下,我得到了正确的400。

  • 只是想了解如果我将对象传递给实体,那么我需要吗重写类MyCustomExceptions中的某些方法
  • 如何从MyCustomExceptions对象创建响应
  • 若我将字符串传递给实体,它就可以正常工作。为什么

将异常映射到HTTP错误响应

JAX-RS允许您定义Java异常到HTTP错误响应的直接映射。

通过扩展WebApplicationException,您可以创建特定于应用程序的异常,这些异常使用状态代码和作为响应主体的可选消息来构建HTTP响应。

考虑到这一点,您可以抛出一个扩展WebApplicationExceptionBadRequestException,而不是返回一个Response,并将其映射到一个状态代码为400:的HTTP响应

throw new BadRequestException("My bad request");

有关JAX-RS中错误处理的更多详细信息,请参阅以下答案。

WebApplicationException的子类

为了方便起见,WebApplicationException目前由以下异常扩展(可以扩展它们来创建自己的异常):

  • RedirectionException:重定向错误的3xx状态代码
  • ClientErrorException:客户端错误的4xx状态代码
    • BadRequestException:400错误请求
    • ForbiddenException:403禁止
    • NotAcceptableException:406不可接受
    • NotAllowedException:不允许使用405方法
    • NotAuthorizedException:401未经授权
    • NotFoundException:未找到404
    • NotSupportedException:415不支持的媒体类型
  • ServerErrorException:5xx服务器错误的状态代码
    • InternalServerErrorException:500内部服务器错误
    • ServiceUnavailableException:503服务不可用

您正在传递的HTTPHeader中accept参数的值是多少?看起来像是text/plain,而您正试图返回一个Object。

  1. 在请求中将accept值作为application/json传递。或
  2. 更改代码以将类型添加为Json/XML

    Response.status(400).type(MediaType.APPLICATION_JSON).entity(new MyCustomExceptions(400,"My bad request")).build();
    

相关内容

最新更新