避免“找不到带有URI的HTTP请求的映射”或包罗万象的控制器

时间:2019-01-15 16:43:10

标签: java spring-boot spring-mvc

避免以下警告的最佳方法是什么?

o.s.web.servlet.PageNotFound : No mapping found for HTTP request with URI [......]

我尝试如下添加一个包罗万象的控制器:

@Controller
class CatchAllController {
    @RequestMapping(value = "/**")
    public ResponseEntity<?> catchAll() {
        return new ResponseEntity<>(HttpStatus.NOT_FOUND);
    }
}

但是由于某些原因,控制器也会捕获静态内容(即src/main/resources/static/),因此无法访问。

另一方面,我不希望这些警告出现在日志中,因为客户端可能会访问随机URI,并且我也不想收到通知。

1 个答案:

答案 0 :(得分:1)

  

另一方面,我不希望这些警告出现在日志中   因为客户端可能会访问随机URI,并且我不希望收到通知   关于它。

然后只需禁用记录这些警告的记录器。

截至Spring 5.1.4.RELEASE,这些都是通过这些成员从DispatcherServlet记录的

/** Log category to use when no mapped handler is found for a request. */
public static final String PAGE_NOT_FOUND_LOG_CATEGORY = "org.springframework.web.servlet.PageNotFound";

/** Additional logger to use when no mapped handler is found for a request. */
protected static final Log pageNotFoundLogger = LogFactory.getLog(PAGE_NOT_FOUND_LOG_CATEGORY);

使用Logback,您可以声明类似

<logger name="org.springframework.web.servlet.PageNotFound" level="ERROR">
   ...
</logger>

类似地,您将使用log4j2

<Logger name="org.springframework.web.servlet.PageNotFound" level="ERROR">
   ...
</Logger>