原文: https://javatutorial.net/implementing-controllers-in-spring

控制器在 Spring 中的主要目的是拦截传入的 http 请求,将数据发送到模型进行处理,最后从模型中获取处理后的数据,然后将完全相同的数据传递给要呈现它的视图。

在 Spring 中实现控制器 - 图1

上面所写内容的顶级概述:

在 Spring 中实现控制器 - 图2

Spring 工作流程

现在,让我们构建一个简单的应用程序,作为在 Spring 中实现控制器的示例。

当您要“声明”一个类作为控制器时,就像使用@Controller对其进行注释一样简单。 在类级别使用时,控制器现在可以处理 REST API 请求。

GetMapping注解

当使用@Controller注解时,可以通过使用该方法的RequestMapping注解来提供请求映射。 还有@RequestMapping@PostMapping@PutMapping可以简化常见 HTTP 方法类型的映射。

  1. package com.example.demo;
  2. import org.springframework.boot.SpringApplication;
  3. import org.springframework.boot.autoconfigure.SpringBootApplication;
  4. import org.springframework.stereotype.Controller;
  5. import org.springframework.web.bind.annotation.RequestMapping;
  6. import org.springframework.web.bind.annotation.ResponseBody;
  7. @RestController
  8. @SpringBootApplication
  9. public class DemoApplication {
  10. @GetMapping("/")
  11. String home() {
  12. return "Greetings from Java Tutorial Network";
  13. }
  14. public static void main(String[] args) {
  15. SpringApplication.run(DemoApplication.class, args);
  16. }
  17. }

上面的代码段,我们创建了一个DemoApplication,其注释为@Controller@SpringBootApplication。 请注意@GetRequest("/")的使用。 这就是说home()方法将显示注释中放置的内容,在本例中为"/",即http://localhost:8080/

在示例中,我使用的是@RestConroller,它基本上是控制器的专用版本,其中包括@Controller@ResponseBody注解。 它只是简化了控制器的实现。

当我们运行上面的代码时,我们得到以下结果:

在 Spring 中实现控制器 - 图3

输出量

如果我们想实现一个简单的登录功能,我们将执行以下操作:

  1. package com.example.demo;
  2. import org.springframework.stereotype.Controller;
  3. import org.springframework.web.bind.annotation.RequestMapping;
  4. @Controller
  5. @RequestMapping("/account/*")
  6. public class AccountController {
  7. @RequestMapping
  8. public String login() {
  9. return "login";
  10. }
  11. }

我们在这里所做的是,我们对类AccountController和方法login()都进行了注释。 当访问http://localhost:8080/account/时,我们将被带到登录页面。 请注意网址末尾的"/"。 如果不存在,例如http://localhost:8080/account,将导致错误。

我在account/之后加上*的原因是,如果我们想向其添加更多内容(例如注册),则该 URL 将能够处理具有不同路径的所有请求。

但就目前而言,我们将仅坚持登录。 接下来,我们需要为登录创建一个类,并将其注释为@Controller

  1. package com.example.demo;
  2. import org.springframework.stereotype.Controller;
  3. import org.springframework.web.bind.annotation.RequestMapping;
  4. import org.springframework.web.bind.annotation.RequestMethod;
  5. @Controller
  6. @RequestMapping("/account/login")
  7. public class Login {
  8. @GetMapping
  9. public String login() {
  10. return "login";
  11. }
  12. }

现在,当我们访问http://localhost:8080/account/login时,它将返回login.jsp文件中的内容。