使用 @Controller 显示 index.html 页面 \|弹簧靴

新手上路,请多包涵

显示我创建的 index.html 网页时出现问题。转到 localhost:8080 时,我不断收到的输出是字符串值“index”,而不是网页本身。 /templates 目录的图像和本地主机给出的结果可以在下面找到(超链接)

 @Controller
public class IndexController {

        @RequestMapping("/")
        @ResponseBody
        public String index() {
            return "index";
        }
}

模板 目录本地主机:8080_result

原文由 Yuri Khechoyan 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 325
1 个回答

从控制器方法 addNewBooking(…) 中删除 @ResponseBody 。使用 @ResponseBody 你告诉 Spring 将你的方法的结果映射到 HTTP 响应主体,因此你的浏览器将它显示为纯文本(如果你想用 Spring 开发 RESTful API,你需要这个)。当您使用 Spring MVC 时,您想要返回一个视图,因此您不需要 @ResponseBody

编辑 1: 详细解释我写的内容。

使用 Spring Web 你有两种选择来编写你的应用程序:

  • 编写服务器端渲染应用程序,并使用 JSPs Spring MVC Thymeleaf templates Freemaker templates
  • 为例如从 RESTful 后端获取数据的单页应用程序(如 ReactJs 或 Angular)编写 RESTful 后端

对于选择 1,您使用 @Controller 注释您的控制器,并提供几个端点,您的 Spring 应用程序将在这些端点使用您的服务器端渲染器模板进行响应。您的所有控制器都返回一个 String 这是您要传输到浏览器的模板的名称。 Spring 将采用 String 名称,如 index 并将返回例如呈现的 index.jsp 到请求。示例如下所示:

 @Controller
public class IndexController {

        @RequestMapping("/")
        public String index() {
            return "index";
        }
}

For choice 2 you annotate your controller with @RestController OR you @Controller and @ResponseBody together (technically @RestController is just a combination of @Controller 和`@ResponseBody)。使用此设置,您告诉 Spring 使用您的控制器方法返回类型并将其解析为 JSON,例如使用 Jackson 将其放入 HTTP 正文中。如果您在浏览器中访问这样的端点,您将获得对象的 JSON 表示形式。看下面的例子:

 @RestController
public class IndexController {

        @RequestMapping("/persons")
        public List<Person> getPersons() {
            // ... some service calls/database access to get all persons
            return personList;
        }
}

人类:

 public class Person {
   private String name;
   private int age;

   // getter and setter ...

}

如果您现在访问 http://localhost:8080/persons 您可以获得以下输出:

 [
  {
    "name": "John Doe",
    "age": 1337
  },
  {
    "name": "Peter Parker",
    "age": 12
  }
]

总结一下解释:如果你想提供视图(服务器端呈现的 HTML 页面),你必须使用 @Controller 并且你的控制器方法必须返回模板的名称。如果计划构建 RESTful 应用程序,请使用 @RestController@Controller@ResponseBody 的组合。

原文由 rieckpil 发布,翻译遵循 CC BY-SA 3.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题