4

Jersey 支持 ExceptionMappers 作为一般处理坏事的一种方式,但这仅在调用到达我的代码时才有效。如果有人喜欢这个 URL,比如说,http://host/fubar而不是http://host/foobar,那么它会返回一个通用的 404。

我需要获取那些经过优化的 URL 并重定向到我选择的页面,但几个小时后,我似乎无法找到正确的配置来实现这一点。我一直在浏览调试器,但我没有找到可以挂接某些配置以将此类 404 重定向到我选择的页面的位置。

编辑:请注意,任何 WebApplicationException 的自定义异常映射器都会被 Jersey(1.17.1)忽略。相反,它被路由到不同的处理方法。下面是 Jersey 的 ContainerResponse.java 的代码片段:

if (cause instanceof WebApplicationException) {
    mapWebApplicationException((WebApplicationException)cause);
} else if (!mapException(cause)) { ... }

那 mapWebApplicationException((WebApplicationException)cause) 是 Jersey 自己的处理,所以它永远不会遇到调用自定义映射器的 elseif 中的 mapException(cause) 方法。

4

3 回答 3

3

解决赏金问题:

这可能是 Jersey 中的一个错误,因为处理异常的公认方法不适用于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();
    }
}
于 2017-01-26T16:50:39.177 回答
1

创建 customExceptionMapper 应该可以解决这个问题。

@Provider
public class NotFoundMapper implements ExceptionMapper<NotFoundException>{

 public Response toResponse(NotFoundException exception){

    // do your custom processing here..
 }

}
于 2013-10-23T15:26:27.677 回答
1

尝试使用 jersey2.version =2.19 并且它工作不知道 abt 1+ 版本

演示网址:https ://jerseyexample-ravikant.rhcloud.com/rest/jws/getUserList/

您可以将其更改为其他任何内容,并将在错误消息下方出现

    @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();
    }


}
于 2017-01-30T09:23:44.797 回答