Jersey支持ExceptionMappers作为一般处理坏事的方法,但只有在调用到达我的代码时才有效。如果某人为该网址添加了boff,请说出http://host/fubar
而不是http://host/foobar
,那么它会返回一个通用的404.
我需要抓住那些boffed网址并重定向到我选择的网页,但几个小时后我似乎找不到合适的配置来实现这一目标。我一直在浏览调试器,但是我找不到我在某些配置中挂钩的地方,将这些404重定向到我选择的页面。
编辑:请注意,Jersey(1.17.1)会忽略任何WebApplicationException的自定义异常映射器。相反,它被路由到另一种处理方法。以下是Jersey的ContainerResponse.java的代码片段:
if (cause instanceof WebApplicationException) {
mapWebApplicationException((WebApplicationException)cause);
} else if (!mapException(cause)) { ... }
mapWebApplicationException((WebApplicationException)cause)是Jersey自己的处理,因此它永远不会在调用自定义映射器的elseif中遇到mapException(cause)方法。
答案 0 :(得分:3)
解决赏金问题:
这可能是泽西岛的一个错误,因为处理异常的可接受方式对
WebApplicationException
不起作用。我正在寻找一种解决方法,错误报告或在以后版本中修复的信息。
您可以创建捕获ExceptionMapper
的RuntimeException
,然后测试该异常是否为WebApplicationException
的实例:
@Provider
public class CustomExceptionMapper implements ExceptionMapper<RuntimeException> {
@Override
public Response toResponse(RuntimeException e) {
if (e instanceof WebApplicationException) {
return ((WebApplicationException) e).getResponse();
}
return Response.serverError().build();
}
}
答案 1 :(得分:1)
创建customExceptionMapper应解决此问题。
@Provider
public class NotFoundMapper implements ExceptionMapper<NotFoundException>{
public Response toResponse(NotFoundException exception){
// do your custom processing here..
}
}
答案 2 :(得分:1)
尝试使用jersey2.version = 2.19并且它的工作原理并不知道abt 1+版本
演示网址:https://jerseyexample-ravikant.rhcloud.com/rest/jws/getUserList/
您可以将其更改为任何其他内容,并将低于错误消息msg
@Provider
public class EntityNotFoundException extends WebApplicationException implements ExceptionMapper<NotFoundException>
{
private static final long serialVersionUID = 7886520141629139380L;
//@Override
public Response toResponse(NotFoundException arg0) {
StringBuilder response = new StringBuilder("<response>");
response.append("<status>ERROR</status>");
response.append("<message>The method you are looking for does not exist </message>");
response.append("<time>" + new Date().toString() + "</time>");
response.append("</response>");
return Response.status(404).entity(response.toString()).type(MediaType.APPLICATION_XML).build();
}
}