Spring Boot项目创建xmlViewResolver Bean报错求助
解决XmlViewResolver Bean创建失败的问题
嘿,我看了你的配置和代码,发现几个会导致xmlViewResolver Bean创建失败的问题,咱们一步步来解决:
1. 错误的Bean初始化递归调用
你在xmlViewResolver()方法里注释掉的xmlViewResolver().setOrder(1);是个大坑——如果放开这条代码,会让Spring在初始化Bean时无限递归调用这个方法,直接引发栈溢出或Bean创建失败。正确的做法是直接用当前创建的resolver实例设置优先级:
修改后的xmlViewResolver Bean配置:
@Bean public XmlViewResolver xmlViewResolver(){ XmlViewResolver resolver = new XmlViewResolver(); // 这里先保留原资源路径,后面会修正路径问题 Resource resource = new ServletContextResource(servletContext, "/WEB-INF/Spring/views.xml"); resolver.setLocation(resource); resolver.setOrder(1); // 直接用当前实例设置优先级,避免递归 return resolver; }
2. Views.xml存在无效的嵌套beans标签
你的views.xml里嵌套了两层<beans>标签,这完全不符合Spring XML配置规范,XML解析器会直接报错。得把内层多余的<beans>标签删掉:
修改后的views.xml:
<beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd"> <bean id="welcome" class="org.springframework.web.servlet.view.JstlView"> <property name="url" value="/WEB-INF/views/xml_welcome.jsp" /> </bean> </beans>
3. 资源路径错误:ClassPathResource无法访问WEB-INF目录
ClassPathResource是从类路径(比如src/main/resources)加载资源的,而/WEB-INF不在类路径范围内,所以用它找不到/WEB-INF/Spring/views.xml。你需要改用ServletContextResource来访问Web应用根目录下的资源,同时要在配置类里注入ServletContext:
更新后的WebMvcConfig类:
@Configuration @ComponentScan @EnableWebMvc public class WebMvcConfig extends WebMvcConfigurerAdapter { @Autowired private ServletContext servletContext; // 注入ServletContext // 其他方法(addResourceHandlers、configureDefaultServletHandling等)保持不变 @Bean public XmlViewResolver xmlViewResolver(){ XmlViewResolver resolver = new XmlViewResolver(); // 使用ServletContextResource访问WEB-INF下的配置文件 Resource resource = new ServletContextResource(servletContext, "/WEB-INF/Spring/views.xml"); resolver.setLocation(resource); resolver.setOrder(1); // 设置最高优先级,比jspViewResolver的默认优先级(Integer.MAX_VALUE)更高 return resolver; } }
4. 确认视图文件存在
最后别忘了检查/WEB-INF/views/xml_welcome.jsp这个文件是否真的存在,否则即使Bean创建成功,视图解析阶段也会报错。
把这些问题都修复后,重启应用应该就能解决xmlViewResolver Bean创建失败的问题了。
内容的提问来源于stack exchange,提问作者Aubrey.t
相关产品推荐
相关产品推荐

