我想在应用程序启动时列出日志中的所有已注册请求映射(Spring MVC,log4j)。理想情况下,我想为每个条目查看两件事:URL和相应的控制器方法。
我尝试过什么:我在corresponding documentation entry搜索没有成功。
答案 0 :(得分:0)
从Spring 3.1开始,您需要激活org.springframework.web.servlet.handler.AbstractHandlerMethodMapping.registerHandlerMethod(...)
的信息记录。
答案 1 :(得分:0)
请查看此博文,了解有关如何在应用程序中记录Spring MVC映射的更多信息,source blogpost。
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerMapping;
@Controller
public class EndpointDocController {
private final RequestMappingHandlerMapping handlerMapping;
@Autowired
public EndpointDocController(RequestMappingHandlerMapping handlerMapping) {
this.handlerMapping = handlerMapping;
}
@RequestMapping(value = "/endpointdoc", method = RequestMethod.GET)
public void show(Model model) {
model.addAttribute("handlerMethods",
this.handlerMapping.getHandlerMethods());
}
}
答案 2 :(得分:0)
从春天的代码(org.springframework.web.servlet.handler.AbstractHandlerMethodMapping
):
this.handlerMethods.put(mapping, newHandlerMethod);
if (logger.isInfoEnabled()) {
logger.info("Mapped \"" + mapping + "\" onto " + newHandlerMethod);
}
如您所见,代码已经存在并映射到 INFO 级别(apache-commons-logging),因此默认情况下您应该看到每个@RequestMapping
,无论它们是否在@Controller
或@RestController
。
⚠ 因为您要求它,首先确保记录器实现可用。如果你看到
SLF4J: Failed to load class "org.slf4j.impl.StaticLoggerBinder".
SLF4J: Defaulting to no-operation (NOP) logger implementation
SLF4J: See http://www.slf4j.org/codes.html#StaticLoggerBinder for further details.
在应用程序启动时,没有记录器实现!如果出现此消息,则必须确定要使用的记录器实现。最常用的是slf4j,log4j和jul。
将此添加到依赖项以查看输出。
<groupId>org.slf4j</groupId>
<artifactId>slf4j-simple</artifactId>
<version>1.6.1</version> </dependency>
仅仅是其他人使用的API,而不是实现,而System.out
不是单commons-logging
。