yudao-boot-min 入门指南
常用注解
- @Controller
- @RestController
- @RequestMapping
- @GetMapping
- @PostMapping
- @PutMapping
- @DeleteMapping
- @RequestParam
- @RequestBody
- @PathVariable
- @Autowired
- @Service
- @Repository
- @ResponseBody
- @Operation
- @PreAuthorize
- @Validated
- @Resource
- @Override
- @Transactional
- @LogRecord
注解详解
@Controller
@Controller 是 Spring 框架中的一个注解,用于标记一个类作为 Spring MVC 的控制器。它通常与 @RequestMapping 一起使用,用于处理 Web 请求。
@Controller
@RequestMapping("/users")
public class UserController {
// 控制器逻辑
}@RestController
@RestController 是 Spring 4.0 引入的注解,它是 @Controller 和 @ResponseBody 的组合。使用此注解的类中的所有方法都会自动将返回值序列化为 JSON 并写入响应体。
@RestController
@RequestMapping("/api/users")
public class UserRestController {
@GetMapping("/{id}")
public User getUser(@PathVariable Long id) {
// 返回用户信息,自动序列化为 JSON
return userService.findById(id);
}
}@RequestMapping
@RequestMapping 用于映射 Web 请求到具体的处理方法。它可以应用于类级别或方法级别,指定请求的 URL 路径和 HTTP 方法。
@Controller
@RequestMapping("/users")
public class UserController {
@RequestMapping(value = "/{id}", method = RequestMethod.GET)
public String getUser(@PathVariable Long id, Model model) {
// 处理 GET 请求
return "user-detail";
}
}@GetMapping
@GetMapping 是 @RequestMapping(method = RequestMethod.GET) 的简写形式,专门用于处理 HTTP GET 请求。
@RestController
public class UserController {
@GetMapping("/users/{id}")
public User getUser(@PathVariable Long id) {
return userService.findById(id);
}
}@PostMapping
@PostMapping 是 @RequestMapping(method = RequestMethod.POST) 的简写形式,专门用于处理 HTTP POST 请求。
@RestController
public class UserController {
@PostMapping("/users")
public User createUser(@RequestBody User user) {
return userService.save(user);
}
}@PutMapping
@PutMapping 是 @RequestMapping(method = RequestMethod.PUT) 的简写形式,专门用于处理 HTTP PUT 请求。
@RestController
public class UserController {
@PutMapping("/users/{id}")
public User updateUser(@PathVariable Long id, @RequestBody User user) {
user.setId(id);
return userService.update(user);
}
}@DeleteMapping
@DeleteMapping 是 @RequestMapping(method = RequestMethod.DELETE) 的简写形式,专门用于处理 HTTP DELETE 请求。
@RestController
public class UserController {
@DeleteMapping("/users/{id}")
public ResponseEntity<?> deleteUser(@PathVariable Long id) {
userService.deleteById(id);
return ResponseEntity.ok().build();
}
}@RequestParam
@RequestParam 用于从请求参数中获取值。它可以用于获取查询参数、表单数据等。
@GetMapping("/users/search")
public List<User> searchUsers(@RequestParam String name,
@RequestParam(required = false, defaultValue = "0") int page) {
return userService.findByName(name, page);
}@RequestBody
@RequestBody 用于将 HTTP 请求的正文部分转换为对象。常用于处理 JSON 数据。
@PostMapping("/users")
public User createUser(@RequestBody User user) {
// 将请求体中的 JSON 数据转换为 User 对象
return userService.save(user);
}@PathVariable
@PathVariable 用于从 URL 路径中提取变量值。例如,在 /users/{id} 中,可以使用 @PathVariable 获取 id 的值。
@GetMapping("/users/{id}")
public User getUser(@PathVariable Long id) {
// 从 URL 路径中提取 id 参数
return userService.findById(id);
}@Autowired
@Autowired 是 Spring 的注解,用于自动装配依赖。Spring 容器会自动寻找匹配的 bean 并注入到标注了此注解的字段或方法中。
@Service
public class UserService {
@Autowired
private UserRepository userRepository;
// 使用注入的 userRepository
}@Service
@Service 是 Spring 的一个 stereotype 注解,用于标记服务层组件。它通常用于业务逻辑类上。
@Service
public class UserService {
public User save(User user) {
// 业务逻辑
return userRepository.save(user);
}
}@Repository
@Repository 是 Spring 的一个 stereotype 注解,用于标记数据访问层组件。它通常用于 DAO 类上,并提供持久化异常转换。
@Repository
public interface UserRepository extends JpaRepository<User, Long> {
List<User> findByName(String name);
}@ResponseBody
@ResponseBody 用于将方法返回值直接写入 HTTP 响应体。通常用于返回 JSON 或 XML 数据。
@Controller
public class UserController {
@GetMapping("/users/{id}")
@ResponseBody
public User getUser(@PathVariable Long id) {
// 返回值将被序列化并写入响应体
return userService.findById(id);
}
}@Operation
@Operation 是 Swagger 提供的一个注解,用于方法级别的 API 文档描述。它允许你为方法添加标题、描述、请求参数、响应结果等信息。
import io.swagger.v3.oas.annotations.Operation;
@Operation(value = "新增用户")
public CommonResult<Long> createUser(@Valid @RequestBody UserSaveReqVO reqVO) {
Long id = userService.createUser(reqVO);
return success(id);
}@PreAuthorize
@PreAuthorize 是 Spring Security 提供的一个注解,用于方法级别的权限控制。它允许你使用 SpEL (Spring Expression Language) 表达式来定义权限检查逻辑。
@PostMapping("/create")
@Operation(summary = "新增用户")
@PreAuthorize("@ss.hasPermission('system:user:create')")
public CommonResult<Long> createUser(@Valid @RequestBody UserSaveReqVO reqVO) {
Long id = userService.createUser(reqVO);
return success(id);
}@Validated
@Validated 是 Spring 框架中的一个注解,用于方法级别的参数验证。它允许你使用 JSR-303/JSR-349 标准的注解(如 @NotNull、@Size 等)来验证方法参数。
import org.springframework.validation.annotation.Validated;
import jakarta.validation.Valid;
@Validated
public class UserService {
public User save(@Valid @RequestBody User user) {
// 业务逻辑
return userRepository.save(user);
}
}@Resource
@Resource 是 Java 标准提供的一个注解,用于依赖注入。它允许你按名称或类型注入依赖。
import jakarta.annotation.Resource;
public class UserController {
@Resource
private UserService userService;
// 使用注入的 userService
}@Override
@Override 是 Java 中的一个关键字,用于表示一个方法重写了父类中的方法。使用 @Override 注解可以提高代码的可读性和可维护性,并且在方法签名错误时会编译报错。
@Override
public String toString() {
return "User{" +
"id=" + id +
", name='" + name + '\'' +
'}';
}@Transactional
@Transactional 是 Spring 框架中的一个注解,用于声明式事务管理。它允许你将事务逻辑从业务逻辑中分离出来,简化了事务处理的代码。
import org.springframework.transaction.annotation.Transactional;
@Transactional
public class UserService {
public User save(User user) {
// 业务逻辑
return userRepository.save(user);
}
public User update(User user) {
// 业务逻辑
return userRepository.save(user);
}
}@LogRecord
@LogRecord 是 Yudao 框架提供的一个注解,用于方法级别的日志记录。它允许你为方法添加日志标题、描述、参数、结果等信息。