我正在使用部署在Tomcat上的RESTEasy开发REST风格的Web服务。我已经配置了一个错误页面,该页面接受异常的消息并在请求期间发生任何异常时基于该页面生成XML。
这对于任何应用程序生成的异常都可以正常工作。但是,如果客户端发送了无法正确解组的无效XML,javax.xml.bind.UnmarshalException则会引发,并使用Tomcat的默认错误页面代替我的。
javax.xml.bind.UnmarshalException
我已将错误页面配置为web.xml中的错误代码500。
使用RESTEasy时,使用错误页面是处理错误的正确方法还是有替代方法?
最好的方法是使用ExceptionMapper。您创建一个实现ExceptionMapper的类UnmarshalExceptionMapper。您可以使用“ @Provider”对此进行注释,并在Application构造函数中执行“ 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,找到“ accept”标头,并相应地设置类型。