Spring Boot 常用注解速查表

@SpringBootApplication

  • 作用:标记为启动类,等价于 @Configuration + @EnableAutoConfiguration + @ComponentScan
  • 用法
@SpringBootApplication
public class WeiLaiApplication {
    public static void main(String[] args) {
        SpringApplication.run(WeiLaiApplication.class, args);
        log.info("server started");
    }
}

@Configuration / @Bean

  • 作用:声明配置类 + 注册 Bean
  • 用法
@Configuration
public class OssConfiguration {
    @Bean
    @ConditionalOnMissingBean
    public AliOssUtil aliOssUtil(AliOssProperties aliOssProperties){
        log.info("开始创建阿里云文件上传工具类对象:{}",aliOssProperties);
        return new AliOssUtil(aliOssProperties.getEndpoint(),
                aliOssProperties.getAccessKeyId(),
                aliOssProperties.getAccessKeySecret(),
                aliOssProperties.getBucketName());
    }
}

@RestController

  • @RestController为@Controller和@ResponseBody的组合注解

在传统的 Spring MVC 开发中,如果要创建一个返回 JSON 或 XML 等数据格式的控制器,需要在类上使用 @Controller 注解,同时在每个处理请求的方法上添加 @ResponseBody 注解,以告知 Spring 框架将方法的返回值直接作为响应体返回。

@Controller
public class TraditionalController {
    @GetMapping("/data")
    @ResponseBody
    public String getData() {
        return "This is some data";
    }
}

使用@RestController就可以简化上述代码

  • 用法
@RestController
public class TraditionalController {
    @GetMapping("/data")
    public String getData() {
        return "This is some data";
    }
}

@RequestMapping / @GetMapping / @PostMapping …

  • 作用:告诉 Spring MVC:某个请求地址(URL)由哪个方法来处理
  • 用法
@GetMapping("/page")
@ApiOperation("分类分页查询")
public Result<PageResult> page(CategoryPageQueryDTO categoryPageQueryDTO){
    log.info("分页查询:{}", categoryPageQueryDTO);
    PageResult pageResult = categoryService.pageQuery(categoryPageQueryDTO);
    return Result.success(pageResult);
}

@RequestBody

  • 作用:请求体JSON转换

  • 请求方式

POST /user
Content-Type: application/json

{"name": "Tom", "age": 18}
  • 用法
@PostMapping
@ApiOperation("新增分类")
public Result<String> save(@RequestBody CategoryDTO categoryDTO){
    log.info("新增分类:{}", categoryDTO);
    categoryService.save(categoryDTO);
    return Result.success();
}

不加@RequestBody会怎么样?

Spring MVC默认会从请求参数(query param / form-data / x-www-form-urlencoded )里绑定数据

POST /user
Content-Type: application/x-www-form-urlencoded

name=Tom&age=18

如果发送的是JSON 格式请求体,就收不到

表单(x-www-form-urlencoded):轻量、适合简单数据(登录、搜索)

JSON(application/json):通用性强,支持复杂结构,适合前后端分离,主流

@RequestParam

  • 作用:获取查询参数或表单字段
  • 用法
@GetMapping("/search")
public String search(@RequestParam String name, 
                     @RequestParam(defaultValue="18") int age) {
    return name + ":" + age;
}

@PathVariable

  • 作用:获取路径参数
  • 用法
@GetMapping("/user/{id}")
public String getUser(@PathVariable("id") Long id) {
    return "User ID=" + id;
}
  • @PathVariable@RequestParam的区别
注解 数据来源 适用场景 示例 URL
@PathVariable URL 路径变量(路径的一部分) 适用于 RESTful 风格的 URL /users/{id}/users/123
@RequestParam 查询参数? 后的参数) 适用于查询参数、表单提交 /users?id=123

@Entity / @Table / @Id

  • 作用:JPA 映射数据库表
  • 用法
@Entity
@Table(name="user")
public class User {
    @Id
    private Long id;
    private String name;
}

@Mapper

  • 作用:标记接口为Mapper层接口
  • 用法
@Mapper
public interface UserMapper {
    @Select("select * from users where id = #{id}")
    User findById(Long id);
}

@Transactional

  • 作用:声明事务,支持回滚操作
  • 用法
@Service
public class UserService {
    @Transactional
    public void createUser(User user) {
        userRepository.save(user);
    }
}

@Valid / @Validated

  • 作用:启用对象校验。
  • 用法
@Data
public class User {
    @NotBlank(message = "用户名不能为空")
    private String name;
    @Min(value = 18, message = "年龄必须 >= 18")
    private Integer age;
}

控制器:

@RestController
public class UserController {

    @PostMapping("/add")
    public String addUser(@Valid @RequestBody User user) {
        return "ok";
    }
}

返回:

{
  "errors": [
    "用户名不能为空",
    "年龄必须 >= 18"
  ]
}

分组校验(用 @Validated

public interface Create {}
public interface Update {}

@Data
public class User {
    @NotNull(groups = Update.class, message = "更新时必须有ID")
    private Long id;

    @NotBlank(groups = {Create.class, Update.class}, message = "用户名不能为空")
    private String name;
}

控制器:

@PostMapping("/create")
public String create(@Validated(Create.class) @RequestBody User user) {
    return "created";
}
@PostMapping("/update")
public String update(@Validated(Update.class) @RequestBody User user) {
    return "updated";
}

校验注解

  • @NotNull:不能为空
  • @NotBlank:字符串不能为空白
  • @Size(min, max):长度限制
  • @Email:邮箱格式

@EnableScheduling

  • 作用:开启定时任务
  • 用法
@SpringBootApplication
@EnableScheduling
public class DemoApplication {}

跟下面的注解配合实现

@Scheduled

  • 作用:定义定时任务
  • 用法
@Scheduled(cron = "0/5 * * * * ?")
public void task() {
    System.out.println("每5秒执行一次");
}

@EnableCaching

  • 作用:开启缓存

@Cacheable / @CachePut / @CacheEvict

  • 用法
@Cacheable("users")
public User findUser(Long id) { return repository.findById(id); }

@CachePut("users")
public User updateUser(User user) { return repository.save(user); }

@CacheEvict(value="users", allEntries=true)
public void clearCache() {}

@SpringBootTest

  • 作用:加载 Spring Boot 上下文,集成测试
  • 用法
@SpringBootTest
public class UserServiceTest {
    @Autowired UserService userService;
    @Test void testUser() { ... }
}

@MockBean

  • 作用:在测试中模拟 Bean
  • 用法
@MockBean
private UserRepository userRepository;

欢迎指出任何有错误或不够清晰的表达。可以在下面评论区评论,也可以邮件至 1701220998@qq.com
导航页 GitHub