如何在违反@Produces和@Consumes时自定义抛出的异常

时间:2016-08-11 04:17:30

标签: java rest ejb

  • 我正在研究我的i18n(国际化和本地化)任务 REST服务。现在我想根据传递错误信息 接受 - 在Accept或者抛出的异常的标题的语言 内容 - 标题的类型与@Produces和 @Consumes。
  • 我在ContainerRequestFilter中找到了一个解决方案,但是如果我 检查其中标题的Accept和Content-Type 当ContainerRequestFilter与它不匹配时抛出异常 我想要MediaType,不需要使用@Produces和 @Consumes再次在资源中。
  • 所以我的问题是,有办法吗? 自定义@Produces和@Consumes时抛出的异常 违反(我的意思是NotAcceptableException和NotSupportedException)? 因为我想将多种语言的错误消息传递给 这些例外中的消息。

1 个答案:

答案 0 :(得分:0)

您可以使用ExceptionMapper来捕获服务中抛出的异常并返回格式化的响应。它可以自定义以处理特定的异常。

@Provider
@Singleton
public class ExceptionMapperProvider implements ExceptionMapper<Exception> {

    @Override
    public Response toResponse(final Exception exception){
        return Response.status(HttpStatusCodes.STATUS_CODE_SERVER_ERROR).entity(new BasicResponse(InternalStatus.UNHANDLED_EXCEPTION, exception.getMessage())).type(MediaType.APPLICATION_JSON).build();
    }
}