Java 如何在一个catch-all处理程序中查看请求路径是否匹配但Accept不匹配?

Java 如何在一个catch-all处理程序中查看请求路径是否匹配但Accept不匹配?,java,spring,spring-mvc,Java,Spring,Spring Mvc,通常,spring将为路径不匹配的请求映射返回404响应,如果路径匹配但“Accept”头不匹配,则返回406响应 我有一个默认的控制器,它充当“catch all”,通过返回Accepted格式的故障来处理rest故障。控制器的形式如下: @Controller public class DefaultController { @RequestMapping("/**") public void unmappedRequest(HtpServletRequest req) {

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

我有一个默认的控制器,它充当“catch all”,通过返回
Accept
ed格式的故障来处理rest故障。控制器的形式如下:

@Controller
public class DefaultController {
    @RequestMapping("/**")
    public void unmappedRequest(HtpServletRequest req) {
        throw new ResourceNotFoundException();
    }
}
问题是,如果我在这里找到了匹配项,我就不知道它在其他地方是否匹配。我想将正确的错误返回给客户端,并告诉他们可以重试的
Accept
able类型。目前我所能做的就是抛出一个常规的
ResourceNotFound
异常

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


FWIW我使用的是

我认为一个全包控制器根本不是处理“未映射URL”的好方法

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

如果希望此自定义ExceptionResolver仅应用于特定控制器(REST控制器),则可以使用所需的控制器列表在exception resolver上设置MappedHandlerClass。此外,还可以设置自定义异常解析程序的顺序,使其位于默认解析程序之前

如果你认为我离题了,请告诉我