У меня есть приложение Spring Boot, которое использует SpringBootServletInitializer
.
В моем 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 и параметров исходного запроса.
С этой целью я наткнулся на этим весенним уроком , который я пытался реализовать. Однако я столкнулся с проблемой, когда учебник реализует CustomWebAppInitializer
, который расширяет WebApplicationInitalizer
, мое приложение уже расширяет SpringBootServletInitializer
.
Когда я пытаюсь реализовать оба, я получаю сообщение об ошибке, поскольку SpringBoot уже имеет корневой контекст, который уже был инициализирован SpringBootServletInitializer
.
Когда я пытаюсь переопределить метод onStartup()
в SpringBootServletInitializer
, вместо этого он работает, но мое приложение не инициализируется должным образом и не может быть доступно из браузера.
Я попытался переопределить метод и добавить фильтр перед вызовом super и передачей ServletContext
обратно по цепочке, но это тоже не работает.
servletContext.addFilter("CommonsRequestLoggingFilter",
CommonsRequestLoggingFilter.class)
.addMappingForServletNames(null, false, "myApp");
super.onStartup(servletContext);
Я немного растерялся. Что я здесь не так делаю? (наверное все).