tutorial starter mvc framework example espaƱol data java spring-mvc spring-boot spring-4

java - starter - spring project



Error al manipular el error 404 para la aplicaciĆ³n REST de arranque de primavera (3)

Actualice a Spring Boot 1.1.5.RELEASE.

Estoy intentando repartir en el manejo de excepciones de arranque de primavera. He creado una aplicación REST y la aplicación funciona para todos los URL válidos. Estoy tratando de manejar las excepciones para url no válido. Pero si intento presionar la aplicación con una URL inválida, obtengo la siguiente excepción:

13:04:02.940 [http-bio-8081-exec-3] INFO o.s.web.servlet.DispatcherServlet - FrameworkServlet ''dispatcherServlet'': initialization completed in 44 ms 13:04:03.177 [http-bio-8081-exec-3] ERROR o.s.boot.context.web.ErrorPageFilter - Cannot forward to error page for/sample/processgetMessage5 (response is committed), so this response may have the wrong status code java.lang.IllegalStateException: Cannot forward after response has been committed at org.apache.catalina.core.ApplicationDispatcher.doForward(ApplicationDispatcher.java:348) ~[catalina.jar:7.0.55] at org.apache.catalina.core.ApplicationDispatcher.forward(ApplicationDispatcher.java:338) ~[catalina.jar:7.0.55] at org.springframework.boot.context.web.ErrorPageFilter.handleErrorStatus(ErrorPageFilter.java:123) [spring-boot-1.1.4.RELEASE.jar:1.1.4.RELEASE] at org.springframework.boot.context.web.ErrorPageFilter.doFilter(ErrorPageFilter.java:104) [spring-boot-1.1.4.RELEASE.jar:1.1.4.RELEASE] at org.springframework.boot.context.web.ErrorPageFilter.doFilter(ErrorPageFilter.java:89) [spring-boot-1.1.4.RELEASE.jar:1.1.4.RELEASE] at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:241) [catalina.jar:7.0.55] at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:208) [catalina.jar:7.0.55]

Siendo nuevo en la bota de primavera, no soy capaz de descubrir la razón. Cualquier sugerencia o sugerencia será útil.

Quería probar las opciones mencionadas en este sitio, ingrese la descripción del enlace aquí , una vez que pueda eliminar la excepción.

Cualquier sugerencia sobre cómo manejar 404 con anotaciones en la primavera 4 será muy útil.

Probando el siguiente código: -

@Configuration @EnableWebMvc @EnableSwagger public class WebConfig extends WebMvcConfigurerAdapter { ....... @Bean public EmbeddedServletContainerCustomizer containerCustomizer() { return new EmbeddedServletContainerCustomizer() { @Override public void customize(ConfigurableEmbeddedServletContainer container) { ErrorPage error401Page = new ErrorPage(HttpStatus.UNAUTHORIZED, "/401.html"); ErrorPage error404Page = new ErrorPage(HttpStatus.NOT_FOUND, "/401.html"); ErrorPage error500Page = new ErrorPage(HttpStatus.INTERNAL_SERVER_ERROR, "/401.html"); container.addErrorPages(error401Page, error404Page, error500Page); } }; }

Agregar la dependencia de pom.xml

<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-actuator</artifactId> <version>1.1.5.RELEASE</version> <exclusions> <exclusion> <artifactId>commons-logging</artifactId> <groupId>commons-logging</groupId> </exclusion> </exclusions> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> <version>1.1.5.RELEASE</version> <exclusions> <exclusion> <artifactId>commons-logging</artifactId> <groupId>commons-logging</groupId> </exclusion> </exclusions> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-data-jpa</artifactId> <version>1.1.5.RELEASE</version> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-test</artifactId> <version>1.1.5.RELEASE</version> <scope>test</scope> </dependency>

PFB el rastro actualizado de la pila: -

22:09:03.210 [http-bio-8081-exec-3] INFO o.s.web.servlet.DispatcherServlet - FrameworkServlet ''dispatcherServlet'': initialization completed in 28 ms 22:09:03.413 [http-bio-8081-exec-3] ERROR o.s.boot.context.web.ErrorPageFilter - Cannot forward to error page for/applicationurl/processMessage11 (response is committed), so this response may have the wrong status code java.lang.IllegalStateException: Cannot forward after response has been committed at org.apache.catalina.core.ApplicationDispatcher.doForward(ApplicationDispatcher.java:348) ~[catalina.jar:7.0.55] at org.apache.catalina.core.ApplicationDispatcher.forward(ApplicationDispatcher.java:338) ~[catalina.jar:7.0.55] at org.springframework.boot.context.web.ErrorPageFilter.handleErrorStatus(ErrorPageFilter.java:134) [spring-boot-1.1.5.RELEASE.jar:1.1.5.RELEASE] at org.springframework.boot.context.web.ErrorPageFilter.doFilter(ErrorPageFilter.java:111) [spring-boot-1.1.5.RELEASE.jar:1.1.5.RELEASE] at org.springframework.boot.context.web.ErrorPageFilter.access$000(ErrorPageFilter.java:58) [spring-boot-1.1.5.RELEASE.jar:1.1.5.RELEASE] at org.springframework.boot.context.web.ErrorPageFilter$1.doFilterInternal(ErrorPageFilter.java:87) [spring-boot-1.1.5.RELEASE.jar:1.1.5.RELEASE] at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:107) [spring-web-4.0.6.RELEASE.jar:4.0.6.RELEASE] at org.springframework.boot.context.web.ErrorPageFilter.doFilter(ErrorPageFilter.java:100) [spring-boot-1.1.5.RELEASE.jar:1.1.5.RELEASE] at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:241) [catalina.jar:7.0.55] at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:208) [catalina.jar:7.0.55] at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:220) [catalina.jar:7.0.55] at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:122) [catalina.jar:7.0.55] at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:501) [catalina.jar:7.0.55

]

La aplicación funciona bien para el mapeo de URL válido. Es construir usando arranque de primavera. PFB la aplicación anotada clases: -

@EnableJpaRepositories @EnableAutoConfiguration public class AppConfig { public static void main(String[] args) { SpringApplication.run(AppConfig .class, args); } @Configuration @EnableWebMvc public class WebApplicationConfig extends WebMvcConfigurerAdapter { @Override public void configureMessageConverters( List<HttpMessageConverter<?>> converters) { MappingJackson2HttpMessageConverter mappingJackson2HttpMessageConverter = new MappingJackson2HttpMessageConverter(); converters.add(mappingJackson2HttpMessageConverter); converters.add(new StringHttpMessageConverter()); super.configureMessageConverters(converters); } public class WebApplicationXML extends SpringBootServletInitializer { @Override protected SpringApplicationBuilder configure( SpringApplicationBuilder application) { return application.sources(Application.class); } }


He agregado la asignación para redirigir a páginas html personalizadas si ocurre un 404. PFB los cambios realizados para esto:

  • Se eliminó la anotación @EnableWebMvc de la clase WebConfig.java. Esto se hace para eliminar el error "respuesta ya cometida" al intentar cualquier url no válido.
  • Agregue el siguiente código en la clase WebConfig.java y en las páginas de revenant html:

    @Bean public EmbeddedServletContainerCustomizer containerCustomizer() { return new EmbeddedServletContainerCustomizer() { @Override public void customize(ConfigurableEmbeddedServletContainer container) { ErrorPage error401Page = new ErrorPage(HttpStatus.UNAUTHORIZED, "/401.html"); ErrorPage error404Page = new ErrorPage(HttpStatus.NOT_FOUND, "/404.html"); ErrorPage error500Page = new ErrorPage( HttpStatus.INTERNAL_SERVER_ERROR, "/500.html"); ErrorPage error505Page = new ErrorPage( HttpStatus.HTTP_VERSION_NOT_SUPPORTED, "/505.html"); ErrorPage error506Page = new ErrorPage( HttpStatus.METHOD_NOT_ALLOWED, "/405.html"); container.addErrorPages(error401Page, error404Page, error500Page, error505Page, error506Page); } }; }

Muchas gracias por las sugerencias ans hep. Fue muy útil.

Seguí este enlace después de superar la excepción inicial