Spring框架的圆形视图路径异常

Posted

技术标签:

【中文标题】Spring框架的圆形视图路径异常【英文标题】:Circular view path exception with Spring framework 【发布时间】:2016-06-28 05:54:17 【问题描述】:

基本上,访问“/”和“/a”在浏览器上工作。访问“/testme”不工作。错误是

2016-03-13 15:04:37.709 错误 1933 --- [io-8080-exec-57] os.boot.context.web.ErrorPageFilter : 转发到错误页面 由于异常 [圆形视图路径] 来自请求 [/testmenull] [testme.html]:将分派回当前处理程序 URL [/XXXX/testme.html] 再次。检查您的 ViewResolver 设置! (提示:这个 由于默认视图名称,可能是未指定视图的结果 代。)]

我执行了字符串 grep,但找不到“ViewResolver”。我不知道为什么“/”和“/a”有效。有什么想法吗?

查看图片了解更多信息:

所有 xml 文件:

pom.xml

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
  <modelVersion>4.0.0</modelVersion>
  <groupId>com.xxxxx</groupId>
  <artifactId>Monitor</artifactId>
  <packaging>war</packaging>
  <version>1.0-SNAPSHOT</version>
  <!--<name>Monitor</name>-->
  <url>http://maven.apache.org</url>

  <parent>
      <groupId>org.springframework.boot</groupId>
      <artifactId>spring-boot-starter-parent</artifactId>
      <version>1.1.9.RELEASE</version>
  </parent>

  <dependencies>
      <dependency>
          <groupId>org.springframework.boot</groupId>
          <artifactId>spring-boot-starter-web</artifactId>
      </dependency>
      <dependency>
          <groupId>javax.websocket</groupId>
          <artifactId>javax.websocket-api</artifactId>
          <version>1.1</version>
          <scope>provided</scope> <!--for web socket-->
      </dependency>
      <dependency>
          <groupId>org.springframework.boot</groupId>
          <artifactId>spring-boot-starter-data-jpa</artifactId>
      </dependency>
      <dependency>
          <groupId>mysql</groupId>
          <artifactId>mysql-connector-java</artifactId>
          <version>5.1.31</version>
      </dependency>
      <dependency>
          <groupId>org.springframework.hateoas</groupId>
          <artifactId>spring-hateoas</artifactId>
      </dependency>
      <dependency>
          <groupId>com.google.code.gson</groupId>
          <artifactId>gson</artifactId>
          <version>2.3</version>
      </dependency>
      <dependency>
          <groupId>com.fasterxml.jackson.core</groupId>
          <artifactId>jackson-databind</artifactId>
      </dependency>
      <dependency>
        <groupId>junit</groupId>
        <artifactId>junit</artifactId>
        <version>3.8.1</version>
        <scope>test</scope>
      </dependency>
  </dependencies>

  <build>
      <finalName>Monitor</finalName>
      <plugins>
          <plugin>
              <groupId>org.apache.maven.plugins</groupId>
              <artifactId>maven-compiler-plugin</artifactId>
              <version>3.1</version>
              <configuration>
                  <compilerVersion>1.7</compilerVersion>
                  <source>1.7</source>
                  <target>1.7</target>
              </configuration>
          </plugin>
          <plugin>
              <groupId>org.springframework.boot</groupId>
              <artifactId>spring-boot-maven-plugin</artifactId>
          </plugin>
          <!--<plugin>-->
              <!--<groupId>org.apache.maven.plugins</groupId>-->
              <!--<artifactId>maven-source-plugin</artifactId>-->
              <!--<executions>-->
                  <!--<execution>-->
                      <!--<id>attach-sources</id>-->
                      <!--<goals>-->
                          <!--<goal>jar</goal>-->
                      <!--</goals>-->
                  <!--</execution>-->
              <!--</executions>-->
          <!--</plugin>-->
      </plugins>
      <resources>
          <resource>
              <directory>$basedir/src/main/resources</directory>
          </resource>
          <resource>
              <directory>$basedir/src/main/java</directory>
          </resource>
      </resources>
  </build>
</project>

web.xml

<!DOCTYPE web-app PUBLIC
 "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN"
 "http://java.sun.com/dtd/web-app_2_3.dtd" >

<web-app>
  <display-name>Archetype Created Web Application</display-name>
</web-app>

【问题讨论】:

错误提示检查您的 viewResolver,您检查了吗?你可以粘贴xml配置吗? 没有viewResolver,因为我在所有文件中都做了一个字符串grep。我发布了 web.xml 和 pom.xml。也是所有xml文件的图片。 所以它是一个 Spring-Boot 项目!我认为您对 Spring-MVC 和 Spring-Boot 项目感到困惑。您必须在src/main/resources 目录下缺少testme.html。为什么会出现这个错误,请参阅this answer。 第一张图显示了 index.html、test.html 和 testme.html 都已就位。 index.html、test.html 工作,但 testme.html 不工作。我的问题是为什么 index.html 和 test.html 有效? 我很困惑,当它是一个SpringBoot项目时,为什么你有web.xml?此外,您使用的是旧版本的 Spring-Boot,请将其更新到 1.3.3。并且可以查看src/main/resources文件夹下是否有index.html和test.html文件? 【参考方案1】:

@RequestMapping 的值是“testme”,return 的值也是“testme”,这样当你访问“/testme”时,网页会再次重定向到“/testme”。这将导致无限重定向到“/testme”。

【讨论】:

这是保存的答案 (!) - 圆形视图路径错误【参考方案2】:

尝试了上述所有建议,但对我不起作用。但是当我将控制器类上的注释从@Controller 更改为@RestController(这是@Controller 和@ResponseBody 的组合)时,问题得到了解决。

【讨论】:

刚刚也为我工作过。非常感谢你的队友!【参考方案3】:

如果您使用的是 gradle,则必须添加: compile("org.springframework.boot:spring-boot-starter-thymeleaf"),或者maven找到这个依赖。

【讨论】:

【参考方案4】:

如果您不返回视图。但只有 JSON,在响应中添加 @ResponseBody 有助于返回 JSON 值而不是视图。

例如: @RequestMapping(value="/getList",method = RequestMethod.GET) public @ResponseBody List<LOne> getLOne()

【讨论】:

【参考方案5】:

这个问题是由于 pom.xml 中提到的循环依赖造成的。如果您使用的是 spring-boot-starter-freemaker,请避免使用 spring-boot-starter-web。 spring-boot-starter-web 已经是 spring-boot-starter-freemaker 的一部分。

【讨论】:

【参考方案6】:

我认为如果所有的 HTML 名称都是正确的,也许你需要在你的 MvcConfig 类中声明这样的东西:

@Configuration
public class MvcConfig extends WebMvcConfigurerAdapter 
    @Override
    public void addViewControllers(ViewControllerRegistry registry) 
        registry.addViewController("/home").setViewName("home");
        registry.addViewController("/usuario/perfil").setViewName("usuario/perfil");
        registry.addViewController("/").setViewName("home");
        registry.addViewController("/testme").setViewName("testme");
        registry.addViewController("/test").setViewName("test");
        registry.addViewController("/login").setViewName("login");
         

【讨论】:

以上是关于Spring框架的圆形视图路径异常的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 Spring MVC 测试避免“圆形视图路径”异常

Java框架之SpringMVC 04-视图解析-Spring表单-JSON-上传下载

spring可以解决框架什么问题?

循环视图路径错误 Spring boot

三大框架开发时,spring配置文件出现异常

Spring异常重试框架Spring Retry