Я сделал небольшое приложение загрузки Spring, и теперь я пытаюсь добавить свою собственную обработку исключений. У меня возникла проблема, когда я получаю сообщение об ошибке в журнале, хотя приложение работает так, как ожидалось. Конфигурация:
- Tomcat 8 (автономный)
- Spring Загрузочная версия 1.2.3
- Военная упаковка
Обработчик исключений выглядит следующим образом:
@ControllerAdvice
public class GlobalExceptionHandler {
@ResponseStatus(HttpStatus.NOT_FOUND)
@ExceptionHandler(NotFoundException.class)
@ResponseBody ErrorInfo handleNotFoundRequest(HttpServletRequest req, Exception ex) {
return new ErrorInfo(req.getRequestURL().toString(), ex);
}
}
Мой контроллер, который генерирует исключение:
@RequestMapping(value = "/{id}", method = RequestMethod.GET, produces = {"application/json"})
public @ResponseBody
HashMap environment(@PathVariable("id") long id) {
HashMap<String, Object> map = new HashMap();
Environment env = environmentService.getEnvironment(id);
if(env == null) throw new NotFoundException("Environment not found: " + id);
map.put("environment", env);
return map;
}
My Spring Настройка загрузочного приложения:
@SpringBootApplication
@EnableAutoConfiguration(exclude=ErrorMvcAutoConfiguration.class)
@ComponentScan
public class QaApiApplication {
public static void main(String[] args) {
SpringApplication.run(QaApiApplication.class, args);
}
}
ServletInitializer:
public class ServletInitializer extends SpringBootServletInitializer {
@Override
protected SpringApplicationBuilder configure(SpringApplicationBuilder application) {
return application.sources(QaApiApplication.class);
}
}
pom.xml
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>1.2.3.RELEASE</version>
<relativePath/> <!-- lookup parent from repository -->
</parent>
......
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-jpa</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-jersey</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
Если я делаю вызов, который генерирует исключение, я получаю правильный ответ, 404 с ожидаемым JSON. Однако я вижу ошибку ErrorPageFilter в журнале:
2015-04-09 21: 05: 38.647 ОШИБКА 85940 --- [io-8080-exec-16] o.s.boot.context.web.ErrorPageFilter: не удается переслать ошибку страницы для запроса [/environment/1], поскольку ответ уже совершено. В результате ответ может иметь неправильный код состояния. Если ваше приложение работает на WebSphere Application Server, вы можете уметь решить эту проблему, установив com.ibm.ws.webcontainer.invokeFlushAfterService - false
Ошибок при запуске/развертывании нет, и все, кажется, работает, насколько я вижу. Я подозреваю, что есть некоторые по умолчанию поведение, которое я не переопределил правильно или так, но я еще не понял, что именно.
Любая помощь/подсказка вокруг этого будет очень признательна, поскольку я застрял в том, что проблема может быть.