Spring MVC 和 Application Context 多次刷新尝试

Posted

技术标签:

【中文标题】Spring MVC 和 Application Context 多次刷新尝试【英文标题】:Spring MVC and Application Context multiple refresh attempts 【发布时间】:2016-05-19 03:17:33 【问题描述】:

这个概念是我们可以在没有 XML 文件的情况下创建一个 Spring 应用程序,所以请使用 java 配置文件指出一些解决方案

我正在创建一个示例 web mvc 应用程序作为概念证明,我遇到的问题是,一旦提交表单,我就无法再次使用该表单提交。它给出了这个错误

GenericApplicationContext does not support multiple refresh attempts: just call 'refresh' once

我可以看到我的问题出在哪里,但我似乎找不到解决方法

Controller.java

 AnnotationConfigApplicationContext ctx = new AnnotationConfigApplicationContext();

//@TODO hibernate broke validity
//@TODO disable submit until data is valid
@RequestMapping(value="form", method=RequestMethod.POST)
public String submitForm(@ModelAttribute @Valid Subscriber subscriber,BindingResult result, Model m) 
    m.addAttribute("message", "Successfully saved person: " + subscriber.toString());
    ctx.register(WebConfiguration.class);
    //@TODO fix refresher only once issue
    ctx.refresh();
    SubscriberDao sao = ctx.getBean(SubscriberDao.class);
    sao.savePerson(subscriber);
    return "formPage";

如果你看这里 ctx.refresh 会在我每次访问 URL 时被调用。 我尝试将其放入构造函数中,但没有奏效。如果这是错误的,谁能帮我找到解决方案/更好的替代方案。

【问题讨论】:

请看这篇帖子***.com/questions/24720330/… 这不是测试代码而是实际控制器 【参考方案1】:

这是一个两部分的答案。 当我们尝试在 RequestMapping 中刷新上下文时,我发现其中一部分包含问题。然而,这不是真正的解决方案。真正的解决方案是声明一个我仍然需要处理的 WebApplicationInitializer。

我离题了。

解决方案:

将 AnnotationConfigApplicationContext 替换为 AnnotationConfigWebApplicationContext 应该可以使上述代码正常工作。

但建议您花更多时间了解 WebApplicationInitializer 是如何长期实现的

【讨论】:

以上是关于Spring MVC 和 Application Context 多次刷新尝试的主要内容,如果未能解决你的问题,请参考以下文章

如何将 Spring Boot 项目迁移到旧 Spring MVC 项目。面临的问题,如何在遗留 Spring MVC 项目中读取 application.properties 文件

spring boot mvc - 不支持内容类型'application/json;charset = UTF-8'

Spring MVC + Ajax 错误 400

@produces在spring mvc中是啥意思

在我的(java spring mvc + mysql application,thymeleaf)中实现spring security之后,身份验证发生了一些奇怪的事情

Spring MVC + JSON = 406 不可接受