1.@Controller
在 JavaWeb 开发中,@Controller
是 Spring 框架中的一个注解,主要用于定义控制器类(Controller),是 Spring MVC 模式的核心组件之一。它表示该类是一个 Spring MVC 控制器,用来处理 HTTP 请求并返回相应的视图或数据。
@Controller
的典型用法:
@Controller
:将UserController
类标记为控制器,Spring 会自动扫描该类并将其作为处理 HTTP 请求的组件@RequestMapping("/users")
:设置基础路径/users
,该路径会应用到类中的所有方法@GetMapping("/list")
:表示处理 GET 请求,路径为/users/list
,并返回一个名为userList
的视图@GetMapping("/{id}")
:通过路径变量({id}
)接收动态路径部分并返回视图Model
:用于在控制器方法中传递数据到视图。model.addAttribute("users", users)
将users
数据传递到视图中
@Controller
@RequestMapping("/users")
public class UserController {
// 假设我们有一个 User 类
public static class User {
private String name;
private int age;
// getters and setters
}
// 显示用户列表页面
@GetMapping("/list")
public String showUsers(Model model) {
List<User> users = new ArrayList<>();
users.add(new User("Alice", 30));
users.add(new User("Bob", 25));
model.addAttribute("users", users); // 将数据传递给视图
return "userList"; // 返回视图名称
}
// 显示用户详情页面
@GetMapping("/{id}")
public String showUser(@PathVariable("id") int id, Model model) {
User user = new User("Charlie", 35); // 假设从数据库获取用户
model.addAttribute("user", user);
return "userDetail"; // 返回视图名称
}
}
2.@Requestbody
在 Java Web 开发中,@RequestBody
是 Spring 框架中的一个注解,主要用于将 HTTP 请求的请求体(request body)映射为方法的参数。
具体来说就是,@RequestBody
注解会将 HTTP 请求的正文部分(通常是 JSON 或 XML 格式的数据)自动转换为 Java 对象。例如,当客户端发送一个包含 JSON 数据的 POST 请求时,Spring 会将这些 JSON 数据反序列化成 Java 对象,如下所示,接收一个 JSON 格式的请求体,并将其转换为 Java 对象:
@RestController
public class UserController {
// 假设我们有一个 User 类
public static class User {
private String name;
private int age;
// getters and setters
}
@PostMapping("/users")
public String createUser(@RequestBody User user) {
// 自动将请求体中的 JSON 数据转换成 User 对象
return "User created: " + user.getName() + ", age: " + user.getAge();
}
}
解析:
- @RequestBody:它会将 HTTP 请求的 Body 部分转换为方法参数。在这个例子中,它会将客户端发送的 JSON 数据映射到
User
类对象的字段上 @PostMapping("/users")
:这个注解表示一个 POST 请求,客户端通过请求体发送一个用户信息(如 JSON 格式),Spring 会自动解析这个请求体,并使用@RequestBody
注解将其转换成User
对象
如果客户端发送以下JSON数据:
{
"name": "John Doe",
"age": 30
}
那么在 createUser
方法中,user
对象会被自动填充为:
user.name = "John Doe";
user.age = 30;
3.@RequestMapping
@RequestMapping
是 Spring 框架中用于处理 HTTP 请求的核心注解之一。它可以用于类级别和方法级别,标识一个方法或类与特定的 HTTP 请求(如 GET、POST、PUT、DELETE)映射关系,从而让 Spring 框架能够将 HTTP 请求路由到对应的处理方法。
Spring 为 @RequestMapping
提供了更具体的注解,用于简化 @RequestMapping
的使用:
@GetMapping
:专门用于处理 GET 请求@PostMapping
:专门用于处理 POST 请求@PutMapping
:专门用于处理 PUT 请求@DeleteMapping
:专门用于处理 DELETE 请求@PatchMapping
:专门用于处理 PATCH 请求
这些注解是 @RequestMapping
的快捷方式,适用于常见的 HTTP 请求方法,减少了代码的冗余
@RequestMapping
的使用示例:类级别和方法级别的结合使用
@RequestMapping("/users")
:在类级别指定基本的 URL 路径/users
,该路径会应用到类中的所有方法@GetMapping
和@PostMapping
是@RequestMapping
的快捷方式,分别处理GET
和POST
请求
@RestController
@RequestMapping("/users")
public class UserController {
// 处理 GET 请求,路径为 "/users"
@GetMapping
public List<User> getAllUsers() {
List<User> users = new ArrayList<>();
users.add(new User("Alice", 30));
users.add(new User("Bob", 25));
return users; // 返回用户列表,默认会转化为 JSON
}
// 处理 POST 请求,路径为 "/users"
@PostMapping
public User createUser(@RequestBody User user) {
return user; // 接收 JSON 数据并返回创建的用户对象
}
}
4.@Component
在 Java Web 开发中,@Component
注解是 Spring 框架提供的一个非常重要的注解,用来声明一个类是 Spring 容器中的一个组件,使得该类的实例可以被自动注册到 Spring 容器中进行管理。这样,你就可以利用 Spring 提供的依赖注入(DI)功能,将该组件注入到其他类中,以下是@Component
注解使用步骤:
1.@Component
声明
@Component
通常用于类的声明上,表示该类是一个 Spring 管理的 Bean:
import org.springframework.stereotype.Component;
@Component
public class MyService {
public void doSomething() {
System.out.println("Doing something...");
}
}
2.Spring scan扫描
Spring 默认会扫描带有 @Component
注解的类(以及其他派生注解,如 @Service
、@Repository
、@Controller
等),并将其注册为 Spring 管理的 Bean。为了让 Spring 知道去扫描这些组件,通常会在配置类中使用 @ComponentScan
注解指定包扫描路径
import org.springframework.context.annotation.ComponentScan;
import org.springframework.context.annotation.Configuration;
@Configuration
@ComponentScan(basePackages = "com.example") // 指定要扫描的包
public class AppConfig {
// Spring 会自动扫描并注册包中的 @Component 注解的类
}
3.自动装配
使用 @Autowired
注解可以将 @Component
注解的类实例注入到其他类中:
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
@Component
public class MyController {
@Autowired
private MyService myService;
public void startProcess() {
myService.doSomething();
}
}
@Service
、@Repository
、@Controller
都是 @Component
的派生注解,它们与 @Component
有相同的功能,但用于不同的层次:
@Service
:通常用于业务层服务类@Repository
:通常用于数据访问层类@Controller
:通常用于控制器类(用于 MVC 控制器)@Component
:用于普通的 Bean 类
5.@Autowired & @Resource
@Autowired和@Resource都是用于依赖注入(DI)的注解,但是@Autowired注解是Spring框架提供的注解,它根据类型进行自动装配;@Resource注解是JavaEE提供的注解,它提供了更灵活的方式进行依赖对象的查找,可以按照名称或类型进行注入
@Component
public class UserService {
@Autowired
private User user;
}
@Component
public class UserService {
@Resource
private User user;
}
在上述示例中,使用@Autowired注解将User对象注入到UserService类中,Spring容器会根据UserRepository类型进行自动装配,并将匹配的Bean注入到user字段中;@Resource注解默认按照字段名进行依赖对象的查找和匹配,也可以通过name属性指定依赖对象的名称,它们的区别是:
- @Autowired注解是Spring提供的,用于自动装配Bean依赖。它可以通过类型匹配来自动注入依赖对象,但如果存在多个符合条件的候选对象时,默认使用byType的方式进行自动装配
- @Resource注解是JavaEE提供的,也可以用于自动装配依赖对象。它可以通过名称匹配来自动注入依赖对象,默认使用byName的方式进行自动装配
其他JavaWeb开发常见注解:17.1 JavaWeb-常用注解_java web 判断请求参数注解-CSDN博客
6.@ApiOperation
@ApiOperation
是一个常用于 Java 后端开发中 Swagger 文档生成工具的注解,通常用于描述和说明 API 的接口操作,从而可以展示在localhost:80/doc.html中
@PostMapping("/status/{status}")
@ApiOperation("启用禁用员工账号")
public Result startOrStop(@PathVariable("status") Integer status, Long id){
employeeService.startorstpp(status,id);
return Result.success();
}