跳到主要内容

Spring @Controller

介绍

在 Spring 框架中,@Controller 是一个用于标记类的注解,表明该类是一个控制器(Controller)。控制器是 Spring MVC(Model-View-Controller)架构中的核心组件之一,负责处理用户请求并返回相应的视图或数据。

@Controller 注解通常与 @RequestMapping 注解一起使用,用于将 HTTP 请求映射到特定的处理方法。通过这种方式,开发者可以轻松地构建 RESTful API 或传统的 Web 应用程序。

基本用法

1. 创建一个简单的控制器

以下是一个使用 @Controller 注解的简单示例:

java
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.ResponseBody;

@Controller
public class HelloController {

@GetMapping("/hello")
@ResponseBody
public String sayHello() {
return "Hello, World!";
}
}

在这个例子中,HelloController 类被标记为 @Controller,这意味着它将被 Spring 框架识别为一个控制器。@GetMapping("/hello") 注解将 HTTP GET 请求映射到 sayHello() 方法。@ResponseBody 注解表示该方法返回的字符串将直接作为 HTTP 响应的内容。

2. 运行结果

当你访问 http://localhost:8080/hello 时,浏览器将显示:

Hello, World!

逐步讲解

1. @Controller 的作用

@Controller 注解的主要作用是告诉 Spring 框架,这个类是一个控制器。Spring 会自动扫描带有 @Controller 注解的类,并将其注册为 Spring 应用上下文中的 Bean。

2. @RequestMapping@GetMapping

@RequestMapping 是一个通用的注解,用于将 HTTP 请求映射到控制器的方法。@GetMapping@RequestMapping 的一个特例,专门用于处理 GET 请求。

java
@GetMapping("/hello")
public String sayHello() {
return "hello"; // 返回视图名称
}

在这个例子中,sayHello() 方法返回一个字符串 "hello",Spring 会将其解析为一个视图名称,并尝试渲染名为 hello.jsphello.html 的视图文件。

3. @ResponseBody

@ResponseBody 注解用于指示方法的返回值应直接写入 HTTP 响应体中,而不是解析为视图名称。这在构建 RESTful API 时非常有用。

java
@GetMapping("/hello")
@ResponseBody
public String sayHello() {
return "Hello, World!";
}

在这个例子中,sayHello() 方法返回的字符串 "Hello, World!" 将直接作为 HTTP 响应的内容。

实际案例

1. 构建一个简单的用户管理系统

假设我们正在构建一个简单的用户管理系统,用户可以通过 HTTP 请求获取用户信息。以下是一个使用 @Controller 的示例:

java
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.ResponseBody;

@Controller
public class UserController {

@GetMapping("/user/{id}")
@ResponseBody
public String getUser(@PathVariable int id) {
// 模拟从数据库获取用户信息
return "User ID: " + id;
}
}

在这个例子中,getUser() 方法通过 @PathVariable 注解从 URL 中提取用户 ID,并返回相应的用户信息。

2. 运行结果

当你访问 http://localhost:8080/user/123 时,浏览器将显示:

User ID: 123

总结

@Controller 是 Spring 框架中用于标记控制器的核心注解。通过结合 @RequestMapping@ResponseBody 等注解,开发者可以轻松地处理 HTTP 请求并返回相应的视图或数据。

在实际开发中,@Controller 通常用于构建 Web 应用程序和 RESTful API。通过掌握 @Controller 的使用方法,你将能够更高效地开发 Spring 应用。

附加资源

练习

  1. 创建一个新的 Spring Boot 项目,并添加一个 @Controller 类,处理 /greet 路径的 GET 请求,返回 "Greetings from Spring!"
  2. 修改上面的控制器,使其能够处理 /greet/{name} 路径,并返回 "Hello, {name}!"

通过完成这些练习,你将进一步巩固对 @Controller 的理解。