【发布时间】:2018-10-05 22:10:19
【问题描述】:
我有一个使用 SpringBootServletInitializer 的 Spring Boot 应用程序。
在我的Controller 中,我有多个端点,这些端点根据 URL 中包含的参数进行区分,如下所示:
@RequestMapping(value = "myEndpoint", method = RequestMethod.GET, params = { "Id", "name", "petType" })
public void get(@RequestParam String id, @RequestParam String name, @RequestParam String petType){
//do stuff
}
@RequestMapping(value = "myEndpoint", method = RequestMethod.GET, params = { "Id", "name"})
public void get(@RequestParam String id, @RequestParam String name){
//do stuff
}
在@RequestMapping 标记中包含参数意味着如果缺少参数,则将响应发送回发出请求的客户端,告诉他们错误;但是,服务器端没有记录任何内容。
我想实现日志记录,所以如果向/myEndpoint 发出缺少参数的请求,那么它会显示在服务器日志中。
类似于原始请求的 url 和参数。
为此,我遇到了this spring tutorial,我试图实现它。但是我遇到了一个问题,即本教程实现了一个扩展 WebApplicationInitalizer 的 CustomWebAppInitializer,我的应用程序已经扩展了 SpringBootServletInitializer。
当我尝试实现两者时,我得到一个错误,因为 SpringBoot 已经由 SpringBootServletInitializer 初始化了上下文根。
当我尝试覆盖 SpringBootServletInitializer 中的 onStartup() 方法时,它似乎可以工作,但是我的应用程序未正确初始化并且无法从浏览器访问。
我尝试在调用 super 并将 ServletContext 传递到链上之前覆盖该方法并添加一个过滤器,但这也不起作用。
servletContext.addFilter("CommonsRequestLoggingFilter",
CommonsRequestLoggingFilter.class)
.addMappingForServletNames(null, false, "myApp");
super.onStartup(servletContext);
我有点迷茫。我在这里做错了什么? (可能一切)。
【问题讨论】:
-
您不能使用记录器过滤器并保存每个请求,无论是 200 还是 400,都必须保存在数据库中,然后您可以从那里检索它。
-
那是我的问题,我不知道。我应该在哪里查找这些信息?
标签: java spring spring-boot logging servlet-filters