1

Приложением для одного вида просмотра vaadin 7.7.7, spring-boot 1.5 i проверить фрагмент uri https:/tld/#! Category-name-1 от пользователя и если категория есть показать детали и если неvaadin + spring boot: не может перейти на страницу с ошибкой по запросу

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

, но я получил сообщение об ошибке после обновления пружинного загрузки 1.5 и Vaadin 7.7.7 (с котом) поместить его:

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 

Как я могу отправить HTTP страницы ошибок из Vaadin для пользователя?

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 boot 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, «страница не найдена!»); получил следующую ошибку на консоли: «Невозможно переслать страницу ошибки для запроса [/], поскольку ответ уже был зафиксирован. В результате ответ может иметь неправильный код состояния. Если ваше приложение запущено на WebSphere Application Server, вы может решить эту проблему, установив com.ibm.ws.webcontainer.invokeFlushAfterService на false « Настройка sys msg не была я имею в виду –