2012-08-16 27 views
2

通常情况下,spring将为路径不匹配的请求映射返回404响应,如果路径确实匹配但“Accept”头不匹配,则返回406。如何查看请求路径是否匹配,但是Accept没有处理全部处理程序?

我有一个默认的控制器,作为一个“全能”,通过返回Accept ed格式的错误来处理休息故障。控制器的形式为:

@Controller 
public class DefaultController { 
    @RequestMapping("/**") 
    public void unmappedRequest(HtpServletRequest req) { 
     throw new ResourceNotFoundException(); 
    } 
} 

麻烦的是,如果我在这里做得到一个比赛,我不能告诉,如果它在其他地方匹配。我想将正确的错误返回给客户端,并告诉他们可以重试的Accept可用类型。目前我所能做的就是抛出一个普通的ResourceNotFound异常。

这是不是我可以在一个@Controller做还是我需要诉诸编写某种过滤器链的这个?

FWIW我使用ReST exception handling pattern demonstrated by Stormpath

回答

1

我不认为一个包罗万象的控制器来处理“未映射的网址,”在所有的好办法。

我会建议实施AbstractHandlerExceptionResolver的自定义实现,而不是依赖于Spring提供的默认实现。 doResolveException可以扩展到几乎任何你想要的请求和响应。

如果你想这个自定义ExceptionResolver只适用于特定的控制器(REST控制器),你可以设置你想要的控制器列表的异常解析器mappedHandlerClasses。此外,您可以设置自定义异常解析器的顺序,使其位于默认解析器之前。

如果您觉得我在这里脱离主题,请告诉我。

相关问题