@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