o.s.boot.context.web.ErrorPage:由于响应已经提交,无法转发到请求[/]的错误页面

时间:2016-05-15 16:02:23

标签: spring-boot

当我在tomcat 8中渲染此应用程序时,我一直得到一个空白页面。我看到的唯一错误是:

o.s.boot.context.web.ErrorPageFilter: Cannot forward to error page for 
request [/] as the response has already been committed.

因此我的问题是我无法呈现index.html页面。

我拿了一个静态页面,并在其中添加了一个spring-boot模块。自从我做了更改后,我再也无法呈现页面了。我在templates

下有index.html文件

enter image description here

我在我的控制器中添加了评论,看看他们是否被击中而且他们不是:

@Controller
public class ApplicationController {


    @Autowired
    ContactService contactService;

    @RequestMapping(value="/", method= RequestMethod.GET)
    public String contactForm() throws IOException {
        System.out.println("Inside GET in Application Controller");

        //model.addAttribute("contact", new Contact());

        return "index";
    }

    @RequestMapping(value="/contact", method= RequestMethod.POST)
    public String contactSubmit() throws IOException {

        System.out.println("Inside POST in Application Controller");

        return "index";
    }


}

我使用的是Thymeleaf,但决定反对它,这就是为什么方法中的参数是空白的。

我已将项目上传到GIT,以便有人在需要时更容易找到并下载。

Project on GIT

----------------更新1 ----------------------

@Configuration
public class WebConfig extends WebMvcConfigurerAdapter {

    private static final Logger LOGGER = Logger.getLogger(WebConfig.class);

    @Override
    public void addViewControllers(ViewControllerRegistry registry) {
        registry.addViewController("/").setViewName("index");
    }

    @Override
    public void addResourceHandlers(ResourceHandlerRegistry registry) {

        registry.setOrder(Ordered.HIGHEST_PRECEDENCE);

        registry.addResourceHandler("/css/**").addResourceLocations("/resources/css/");

        registry.addResourceHandler("/images/**").addResourceLocations("/resources/images/");

        registry.addResourceHandler("/image/**").addResourceLocations("/resources/image/");

        registry.addResourceHandler("/javascripts/**").addResourceLocations("/resources/javascripts/");

    }

    @Override
    public void configureDefaultServletHandling(DefaultServletHandlerConfigurer configurer) {
        configurer.enable();
    }

}

没有其他任何东西可以表明我能想到的。如果您也选择其他文件,您可以在GIT上查看它。

3 个答案:

答案 0 :(得分:4)

方法contactForm()contactSubmit()返回String
尝试使用@RestController代替@Controller
它解决了我的问题

答案 1 :(得分:3)

我在玩你的应用程序。 (git repository帮助解决了配置问题)。

问题在于您的配置属性和注释的混合。 以下步骤将有助于恢复scope :short_sleeved, -> { where short_sleeved: true } Spring Boot行为。

  1. default移至index.htm目录。
  2. 将所有文件从webapp复制到webapp/resources
  3. 删除以下配置属性 - webapp
  4. 删除映射到spring.mvc.static-path-pattern=/resources/* /和方法本身。 Boot将处理@RequestMapping(value="/", method= RequestMethod.GET)index.html的映射。 ROOT映射混淆Boot Spring MVC自动配置。
  5. 您可以完全删除/
  6. 下一步是根据需要映射静态资源:

    WebConfig

    查看我的git repository

    查看有关自定义Spring MVC configuration的详细信息。

答案 2 :(得分:1)

您的方法可能缺少'@ResponseBody'。 例如

@RequestMapping(value = "/myMethod", method = RequestMethod.POST, headers = "Accept=application/json") 
@ResponseBody 
public String myMethod(HttpServletRequest request, HttpServletResponse response) 
{ 
    // some business logic

    retutn "Hi" 
}