首页 > 解决方案 > 避免“找不到带有 URI 的 HTTP 请求的映射”或包罗万象的控制器

问题描述

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

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,我不想收到有关它的通知。

标签: javaspring-bootspring-mvc

解决方案


另一方面,我不希望这些警告出现在日志中,因为客户端可能会访问随机 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>

推荐阅读