0

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

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

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

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

4

1 回答 1

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,找到“接受”标头,并相应地设置类型。

于 2010-03-31T23:12:18.757 回答