2

通常,spring 将为路径不匹配的请求映射返回 404 响应,如果路径匹配但“Accept”标头不匹配,则返回 406。

我有一个默认控制器,它充当“包罗万象”,通过以Accepted 格式返回故障来处理其余故障。控制器的形式为:

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

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

这是我可以做的事情@Controller还是我需要为此编写某种过滤器链?

FWIW 我正在使用Stormpath 演示的 ReST 异常处理模式

4

1 回答 1

1

我不认为捕获所有控制器是处理“未映射的 url”的好方法。

我建议实现 AbstractHandlerExceptionResolver 的自定义实现,而不是依赖 Spring 提供的 Default 实现。doResolveException 可以扩展为对请求和响应执行几乎任何您想要的操作。

如果您希望此自定义 ExceptionResolver 仅适用于特定控制器(REST 控制器),您可以在异常解析器上设置 mappedHandlerClasses,并提供所需的控制器列表。此外,您可以设置自定义异常解析器的顺序,使其位于默认解析器之前。

如果你认为我在这里跑题了,请告诉我。

于 2013-04-19T11:23:30.157 回答