【问题标题】:Why are error pages ignored in RESTEasy web service running on Tomcat?为什么在 Tomcat 上运行的 RESTEasy Web 服务中会忽略错误页面?
【发布时间】:2011-01-23 13:31:19
【问题描述】:

我正在使用部署在 Tomcat 上的 RESTEasy 开发一个 REST-ful Web 服务。我已经配置了一个错误页面,当请求期间发生任何异常时,它会获取异常的消息并根据它生成一个 XML。

这适用于任何应用程序生成的异常。但是,如果客户端发送了一个无法正确解组的无效 XML,则会抛出 javax.xml.bind.UnmarshalException 并使用 Tomcat 的默认错误页面而不是我的。

我已将我的错误页面配置为 web.xml 中的错误代码 500。

在使用 RESTEasy 时,使用错误页面是处理错误的正确方法还是有其他方法?

【问题讨论】:

    标签: java tomcat error-handling resteasy


    【解决方案1】:

    最好的方法是使用 ExceptionMapper。您创建一个实现 ExceptionMapper 的类 UnmarshalExceptionMapper。您使用“@Provider”对此进行注释,并在您的应用程序构造函数中执行“classes.add(UnmarshalExceptionMapper.class)”或“singletons.add(new UnmarshalExceptionMapper())”。

    您的异常映射器将如下所示:

     @provider
     public class UnmarshalExceptionMapper 
                implements ExceptionMapper<UnmarshalException> {
        public Response toResponse(UnmarshalException exception) {
            ResponseBuilder rb =
                Response.status(
                      Response.Status.BAD_REQUEST)  // Most appropriate HTTP status code
                .entity(your xml goes here)
                .type("application/xml");  
            return rb.build();
       }
     }
    

    请注意,您必须将类型设置为“application/xml”,因为当前没有为异常映射器完成内容协商。要进行自己的内容协商,请从请求中获取 HttpHeaders,找到“接受”标头,并相应地设置类型。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2010-11-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-04-16
      • 1970-01-01
      • 2017-08-16
      • 2012-02-24
      相关资源
      最近更新 更多