1

通过单视图应用程序vaadin 7.7.7,spring-boot 1.5我从用户检查uri片段https:/ tld /#!category-name-1,如果类别存在秀项,如果没有vaadin + spring boot:无法转发到错误页面请求

VaadinService.getCurrentResponse().sendError(404, "page not found!"); 

但我得到了错误的更新春天启动1.5和7.7.7 vaadin(与嵌入式的tomcat)后:

Cannot forward to error page for request [/vaadinServlet/UIDL/] as the response has already been committed. As a result, the response may have the wrong status code. If your application is running on WebSphere Application Server you may be able to resolve this problem by setting com.ibm.ws.webcontainer.invokeFlushAfterService to false 

我怎么能发送从vaadin HTTP错误页面给用户?

ErrorPageCutomizer.java

@Component 
public class ErrorPageCutomizer implements EmbeddedServletContainerCustomizer { 
    @Override 
    public void customize(ConfigurableEmbeddedServletContainer container) { 
     container.addErrorPages(new ErrorPage(HttpStatus.NOT_FOUND, "/error/404")); 
     container.addErrorPages(new ErrorPage(HttpStatus.INTERNAL_SERVER_ERROR, "/error/500")); 
    } 
} 

RestController.java

import org.springframework.boot.autoconfigure.web.ErrorController; 
import org.springframework.web.bind.annotation.RequestMapping; 
import org.springframework.web.bind.annotation.RestController; 

@RestController 
public class ErrorHandlingController implements ErrorController { 

    private static final String PATH = "/error"; 

    @RequestMapping(value = PATH + "/404") 
    public String error404() { 
     return "<div style='font-weight:bold; margin-top:200px; text-align:center; font-size:160%;'>Page not found...<br><a href=\"https://tld\">to home</a></div>"; 
    } 

    @RequestMapping(value = PATH + "/500") 
    public String error500() { 
     return "<div style='font-weight:bold; margin-top:200px; text-align:center; font-size:160%;'>500 Internal server error...</div>"; 
    } 

    @Override 
    public String getErrorPath() { 
     return PATH; 
    } 
} 

回答

0

Soliution是:

@Configuration 
public class AppInitializer implements WebApplicationInitializer { 

    @Bean 
    public ErrorPageFilter errorPageFilter() { 
     return new ErrorPageFilter(); 
    } 

    @Bean 
    public FilterRegistrationBean disableSpringBootErrorFilter(ErrorPageFilter filter) { 
     FilterRegistrationBean filterRegistrationBean = new FilterRegistrationBean(); 
     filterRegistrationBean.setFilter(filter); 
     filterRegistrationBean.setEnabled(false); 
     return filterRegistrationBean; 
    } 
} 
+1

它不适用于Vaadin 8.0.5和Spring引导1.5.3 –

-1

您是否尝试过SystemMessagesProvider。在该提供者可以定义一个用于errorUrl各种错误:

public class YourServlet extends VaadinServlet 
{ 
    @Override 
    protected void servletInitialized() throws ServletException 
    { 
     super.servletInitialized(); 

     getService().setSystemMessagesProvider(new SystemMessagesProvider() 
     { 
      @Override 
      public SystemMessages getSystemMessages(SystemMessagesInfo systemMessagesInfo) 
      { 
       final CustomizedSystemMessages c = new CustomizedSystemMessages(); 
       final String errorUrl = "<url to errorpage>"; 
       c.setSessionExpiredURL(errorUrl); 
       c.setSessionExpiredNotificationEnabled(false); 

       c.setAuthenticationErrorURL(errorUrl); 
       c.setAuthenticationErrorNotificationEnabled(false); 

       c.setCommunicationErrorURL(errorUrl); 
       c.setCommunicationErrorNotificationEnabled(false); 

       c.setCookiesDisabledURL(errorUrl); 
       c.setCookiesDisabledNotificationEnabled(false); 

       c.setInternalErrorURL(errorUrl); 
       c.setInternalErrorNotificationEnabled(false); 

       c.setSessionExpiredURL(errorUrl); 
       c.setSessionExpiredNotificationEnabled(false); 
       return c; 
      } 
     }); 
    } 
+0

的问题是“我怎样才能发送HTTP错误页面从vaadin用户?”。不是'我怎样才能用Spring发送错误页面'。我的建议就是这个。我希望能解释为什么我的答案被降级。 –

+0

如果我发送:VaadinService.getCurrentResponse()。sendError(404,“page not found!”); 控制台上出现以下错误: “无法转发到错误页面请求[/],因为响应已被提交,因此响应中可能有错误的状态码如果您的应用程序在WebSphere Application Server上运行,可以通过将com.ibm.ws.webcontainer.invokeFlushAfterService设置为false来解决此问题“ 定制sys msg不是我的意思 –

相关问题