4

我正在尝试做教程-> http://spring.io/guides/gs/serving-web-content/

当我运行它时,它显示 Circular View Path[greeting],为什么?

在本教程中,我不明白的一件事是以下内容及其工作原理:

return "greeting";

代码片段:

package hello;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;

@Controller
public class GreetingController {
    @RequestMapping("/greeting")
    public String greeting(@RequestParam(value="name", required=false, defaultValue="World") String name, Model model) {
        model.addAttribute("name", name);
        return "greeting";
    }
}
4

6 回答 6

8

检查 .pom 中的依赖项(如果有)

    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-thymeleaf</artifactId>
    </dependency>
于 2015-08-07T09:31:18.030 回答
4

在学习本教程时,您可能跳过了一个步骤。

我会解释为什么你会得到你所看到的行为,你可以决定之后做什么。

您可能开始了您的应用程序

SpringApplication.run(Application.class, args);

在教程Application类的main方法中。默认情况下,由于@EnableAutoConfiguration(以及类路径上的其他组件),aDispatcherServlet将为您注册,它提供了一个UrlBasedViewResolver不设置 aprefixsuffix它解析的视图的默认值。

在您的@Controller处理程序方法中,当您这样做时

return "greeting";

Spring 将使用UrlBasedViewResolver来解析视图名称。在这种情况下,视图名称将只是greeting. 在正常情况下,一旦完成,它将使用ServletAPIHttpServletRequest#getRequestDispatcher(String)传入的视图名称。该方法返回RequestDispatcher指向该路径的处理程序的 a。

在我们的例子中,在获取 之前RequestDispatcher,Spring 将比较视图名称(解析为路径)和当前请求的路径。它会发现它们都是相等的。换句话说,一个请求/greeting将通过返回一个视图来处理,该视图/greeting将由相同的@Controller处理程序方法处理,并且永远如此。Spring 检测到这一点并告诉您您有一个圆形视图路径,即。你会无限循环。

了解如何@EnableAutoConfiguration工作并更改您的配置,以便您可以定义自己的UrlBasedViewResolverInternalResourceViewResolver适当地设置前缀和后缀。


您可以在Spring MVC 官方文档中阅读有关视图名称解析的更多信息。

于 2013-11-01T21:10:09.273 回答
2

public String greeting(){}应该写入public **@ResponseBody** String greeting(){}
因此 spring mvc 不会返回视图,您的问题就会消失。

于 2014-10-17T12:28:18.620 回答
0

在这里,您正在点击/greeting返回 string 的 controllew greeting。但是 Spring 的视图解析器实际上试图做的是重定向到一个名为的视图,该视图greeting在此处不可用。所以你只需添加@ResponseBody你的方法,它就会解决你的问题。

@Controller
public class GreetingController {
    @RequestMapping("/greeting")
    public @ResponseBody String greeting(@RequestParam(value="name", required=false, defaultValue="World") String name, Model model) {
        model.addAttribute("name", name);
        return "greeting";
    }
}
于 2017-06-29T02:44:15.130 回答
0

遵循给定的教程时,我遇到了同样的错误。我的 maven 依赖项中有一个错误,我可以通过删除 .m2 文件夹并再次安装依赖项来解决问题。

于 2017-12-19T18:30:48.553 回答
0

当 Intelij Idea 视图运行的 Spring Boot 应用程序无法解决时

添加

<dependency>
<groupId>org.apache.tomcat.embed</groupId>
<artifactId>tomcat-embed-jasper</artifactId>
<scope>compile</scope>
</dependency>

当没有其他方法起作用时,为我做了诀窍。

于 2020-04-11T22:57:05.593 回答