我正在尝试使用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 https://stackoverflow.com/a/33708222/1426227,您可以创建特定于应用程序的异常,以使用状态代码和可选消息作为响应正文来构建 HTTP 响应。
考虑到这一点,而不是返回Response http://docs.oracle.com/javaee/7/api/javax/ws/rs/core/Response.html,你可以抛出一个BadRequestException http://docs.oracle.com/javaee/7/api/javax/ws/rs/BadRequestException.html这延伸了WebApplicationException https://stackoverflow.com/a/33708222/1426227并将被映射到带有状态代码的 HTTP 响应400 https://www.rfc-editor.org/rfc/rfc7231#section-6.5.1:
throw new BadRequestException("My bad request");
有关 JAX-RS 中错误处理的更多详细信息,请参阅此answer https://stackoverflow.com/a/33708222/1426227.
的子类WebApplicationException
为了方便起见,WebApplicationException https://stackoverflow.com/a/33708222/1426227目前由以下异常扩展(并且可以扩展它们以创建您自己的异常):
-
RedirectionException http://docs.oracle.com/javaee/7/api/javax/ws/rs/RedirectionException.html: 3xx https://www.rfc-editor.org/rfc/rfc7231#section-6.4状态码为重定向 errors
-
ClientErrorException http://docs.oracle.com/javaee/7/api/javax/ws/rs/ClientErrorException.html: 4xx https://www.rfc-editor.org/rfc/rfc7231#section-6.5 status codes for Client errors
-
BadRequestException http://docs.oracle.com/javaee/7/api/javax/ws/rs/BadRequestException.html: 400 https://www.rfc-editor.org/rfc/rfc7231#section-6.5.1错误的请求
-
ForbiddenException http://docs.oracle.com/javaee/7/api/javax/ws/rs/ForbiddenException.html: 403 https://www.rfc-editor.org/rfc/rfc7231#section-6.5.3禁止
-
NotAcceptableException http://docs.oracle.com/javaee/7/api/javax/ws/rs/NotAcceptableException.html: 406 https://www.rfc-editor.org/rfc/rfc7231#section-6.5.6不能接受的
-
NotAllowedException http://docs.oracle.com/javaee/7/api/javax/ws/rs/NotAllowedException.html: 405 https://www.rfc-editor.org/rfc/rfc7231#section-6.5.5不允许的方法
-
NotAuthorizedException http://docs.oracle.com/javaee/7/api/javax/ws/rs/NotAuthorizedException.html: 401 https://www.rfc-editor.org/rfc/rfc7235#section-3.1未经授权
-
NotFoundException http://docs.oracle.com/javaee/7/api/javax/ws/rs/NotFoundException.html: 404 https://www.rfc-editor.org/rfc/rfc7231#section-6.5.4未找到
-
NotSupportedException http://docs.oracle.com/javaee/7/api/javax/ws/rs/NotSupportedException.html: 415 https://www.rfc-editor.org/rfc/rfc7231#section-6.5.13不支持的媒体类型
-
ServerErrorException http://docs.oracle.com/javaee/7/api/javax/ws/rs/RedirectionException.html: 5xx https://www.rfc-editor.org/rfc/rfc7231#section-6.6 status codes for Server errors
-
InternalServerErrorException http://docs.oracle.com/javaee/7/api/javax/ws/rs/InternalServerErrorException.html: 500 https://www.rfc-editor.org/rfc/rfc7231#section-6.6.1内部服务器错误
-
ServiceUnavailableException http://docs.oracle.com/javaee/7/api/javax/ws/rs/ServiceUnavailableException.html: 503 https://www.rfc-editor.org/rfc/rfc7231#section-6.6.4暂停服务
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)