gpt4 book ai didi

java - Spring boot中ServletRegistrationBean和ControllerAdvice冲突

转载 作者:行者123 更新时间:2023-11-30 06:26:13 26 4
gpt4 key购买 nike

我正在使用 Spring boot 1.5.7。我有一个配置类 DispatcherServletCustomConfigurationServletRegistrationBean

ServletRegistrationBean registration = new ServletRegistrationBean(
dispatcherServlet(), "/api/*");

在项目中存在另一个带有注释 @ControllerAdvice 的类,带有 404 和错误处理程序。 Controller 的建议不起作用。如果我禁用 DispatcherServletCustomConfiguration Controller 建议可以正常工作。你能帮我吗?再见。

更新:

Controller 建议:

@ControllerAdvice
public class RestResponseEntityExceptionHandler extends ResponseEntityExceptionHandler {

private final Logger log = LoggerFactory.getLogger(this.getClass());

@Override
protected ResponseEntity<Object> handleNoHandlerFoundException(NoHandlerFoundException ex, HttpHeaders headers,
HttpStatus status, WebRequest request) {
GenericResponse response = new GenericResponse();
response.getStatus().setCodice(EsitiMapping.NOT_FOUND.getEsito());
response.getStatus().setDescrizione(EsitiMapping.NOT_FOUND.getDescrizioneEsito());
response.getStatus().setCodice(EsitiMapping.NOT_FOUND.getCodice());
//log.error(ex.getMessage(), ex);
return handleExceptionInternal(ex, response, new HttpHeaders(), HttpStatus.NOT_FOUND, request);
}

@ExceptionHandler(value = { Exception.class })
protected ResponseEntity<Object> handleGenericError(RuntimeException ex, WebRequest request) {
GenericResponse response = new GenericResponse();
response.getStatus().setCodice(EsitiMapping.INTERNAL_ERROR.getEsito());
response.getStatus().setDescrizione(EsitiMapping.INTERNAL_ERROR.getDescrizioneEsito());
response.getStatus().setCodice(EsitiMapping.INTERNAL_ERROR.getCodice());
log.error(ex.getMessage(), ex);
return handleExceptionInternal(ex, response, new HttpHeaders(), HttpStatus.INTERNAL_SERVER_ERROR, request);
}

}

Servlet 注册 Bean:

@Configuration
public class DispatcherServletCustomConfiguration {

@Bean
public DispatcherServlet dispatcherServlet() {
return new DispatcherServlet();
}

@Bean
public ServletRegistrationBean dispatcherServletRegistration() {
ServletRegistrationBean registration = new ServletRegistrationBean(
dispatcherServlet(), "/api/*");
registration.setName(DispatcherServletAutoConfiguration.DEFAULT_DISPATCHER_SERVLET_REGISTRATION_BEAN_NAME);
return registration;
}
}

最佳答案

我找到了解决方案:

@Bean
public ServletRegistrationBean dispatcherServletRegistration() {
ServletRegistrationBean registration = new ServletRegistrationBean(
dispatcherServlet(), "/api/*");
dispatcherServlet().setThrowExceptionIfNoHandlerFound(true);
registration.setName(DispatcherServletAutoConfiguration.DEFAULT_DISPATCHER_SERVLET_REGISTRATION_BEAN_NAME);
return registration;
}

我设置了 dispatcherServlet().setThrowExceptionIfNoHandlerFound(true); 来处理未找到错误的建议。

关于java - Spring boot中ServletRegistrationBean和ControllerAdvice冲突,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47155459/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com