我有一个使用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
标记中包含params意味着如果缺少params,则会将响应发送回客户端,使得请求告诉他们错误;但是,服务器端没有记录任何内容
我想实现日志记录,因此如果向/myEndpoint
发出缺少参数的请求,则它会显示在服务器日志中。
像原始请求的url和params之类的东西。
为此,我遇到了this spring tutorial,我试图实现它。但是我遇到了一个问题,即教程实现了扩展CustomWebAppInitializer
的{{1}},我的应用已扩展WebApplicationInitalizer
。
当我尝试实现两者时,我得到一个错误,因为SpringBoot已经已经由SpringBootServletInitializer
初始化了上下文根。
当我尝试覆盖SpringBootServletInitializer
中的onStartup()
方法时,它似乎可以正常工作,但是我的应用程序未正确初始化,无法从浏览器访问。
我尝试重写该方法并在调用super之前添加一个过滤器并将SpringBootServletInitializer
传递回链,但这也不起作用。
ServletContext
我有点失落。我在这做错了什么? (可能一切)。
答案 0 :(得分:0)
由于Spring Boot已经设置了上下文,因此您不需要使用CustomWebAppInitializer。您只需要在Configuration类中为CommonsRequestLoggingFilter声明一个bean。如果行为不能满足您的需求,您可以实现javax.servlet.Filter并为您的实现声明一个bean。
答案 1 :(得分:0)
尝试在WebMvcConfigurer上添加Custom HandlerInterceptor以进行日志记录。
@Configuration
public class HttpRequestInterceptorConfigurer implements WebMvcConfigurer {
private static Logger LOG = Logger.getLogger(HttpRequestInterceptorConfigurer.class);
@Override
public void addInterceptors(InterceptorRegistry registry) {
registry.addInterceptor(new HandlerInterceptor() {
@Override
public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
LOG.info("URI : " +request.getRequestURI() +" - QueryStr : " +request.getQueryString());
return true;
}
@Override
public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) throws Exception {
}
@Override
public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception {
}
});
}
}