当前位置: 首页 > news >正文

Spring Boot/Spring MVC核心注解深度解析

@Controller 与 @RestController

@Controller用于标记类为Spring MVC控制器,处理HTTP请求并返回视图名称。方法返回值通常配合视图解析器使用,如返回"home"对应home.html。@RestController是@Controller与@ResponseBody的组合,直接返回JSON/XML数据而非视图,适用于RESTful API开发。

@RequestMapping 与衍生注解

@RequestMapping是通用请求映射注解,支持指定路径、方法类型(GET/POST等)、consumes/produces条件。衍生注解包括:

  • @GetMapping:简化GET请求映射
  • @PostMapping:简化POST请求映射
  • @PutMapping:简化PUT请求映射
  • @DeleteMapping:简化DELETE请求映射
  • @PatchMapping:简化PATCH请求映射

示例代码:

@RestController @RequestMapping("/api/users") public class UserController { @GetMapping("/{id}") public User getUser(@PathVariable Long id) { return userService.findById(id); } }

@PathVariable 与 @RequestParam

@PathVariable用于从URI模板中提取变量值,如/users/{id}中的id。@RequestParam用于获取查询参数,支持默认值设置和必填校验:

@GetMapping("/search") public List<User> searchUsers( @RequestParam(required = false, defaultValue = "") String name, @PathVariable String department) { // ... }

@RequestBody 与 @ResponseBody

@RequestBody将HTTP请求体反序列化为Java对象,通常用于POST/PUT请求的JSON/XML数据绑定。@ResponseBody将方法返回值序列化为响应体,在@RestController中默认启用。

@Valid 与校验注解

@Valid触发JSR-380 Bean Validation校验,常与校验注解配合使用:

  • @NotNull:非空校验
  • @Size:字符串/集合长度校验
  • @Email:邮箱格式校验
  • @Pattern:正则校验
@PostMapping public ResponseEntity<User> createUser(@Valid @RequestBody User user) { return ResponseEntity.ok(userService.save(user)); }

@ControllerAdvice 与 @ExceptionHandler

@ControllerAdvice定义全局异常处理类,结合@ExceptionHandler捕获特定异常:

@ControllerAdvice public class GlobalExceptionHandler { @ExceptionHandler(ResourceNotFoundException.class) public ResponseEntity<ErrorResponse> handleNotFound(ResourceNotFoundException ex) { return ResponseEntity.status(HttpStatus.NOT_FOUND).body(new ErrorResponse(ex.getMessage())); } }

@Transactional 事务管理

@Transactional声明式事务管理注解,可配置隔离级别、传播行为、超时等属性。Spring Boot默认对RuntimeException回滚:

@Service public class OrderService { @Transactional(isolation = Isolation.READ_COMMITTED, propagation = Propagation.REQUIRED) public Order createOrder(Order order) { return orderRepository.save(order); } }

@Configuration 与 @Bean

@Configuration标记配置类,@Bean声明Spring容器管理的Bean。常用于第三方库集成:

@Configuration public class AppConfig { @Bean public RestTemplate restTemplate() { return new RestTemplateBuilder().build(); } }

@Autowired 与依赖注入

@Autowired自动装配依赖,支持构造函数注入、字段注入、Setter方法注入。Spring推荐使用构造函数注入:

@Service public class UserService { private final UserRepository userRepository; @Autowired public UserService(UserRepository userRepository) { this.userRepository = userRepository; } }

@Profile 环境配置

@Profile根据激活的profile条件化注册Bean,适用于多环境配置:

@Configuration @Profile("dev") public class DevConfig { @Bean public DataSource devDataSource() { return new EmbeddedDatabaseBuilder().setType(H2).build(); } }

@Scheduled 定时任务

@Scheduled配置定时任务执行周期,支持cron表达式、固定延迟等模式:

@Service public class ReportService { @Scheduled(cron = "0 0 9 * * ?") public void generateDailyReport() { // 每天9点执行 } }
http://www.jsqmd.com/news/217270/

相关文章:

  • 【课程设计/毕业设计】基于python卷积神经网络CNN的不同瓶子识别
  • 函数基础:参数和返回类型
  • 揭秘:不用 Conda,Python “光杆司令“ 是如何指挥 GPU 跑大模型的?
  • 【毕业设计】通过python-CNN卷积神经网络_pytorch框架对猫的类别识别
  • 箭头函数和 this 绑定
  • 模组无尘系列(Clean Room Series)全解析
  • 【毕业设计】基于python卷积神经网络CNN的不同瓶子识别
  • 【毕业设计】基于python-CNN卷积神经网络对盆栽识别
  • 戒烟很难?你被大脑骗了
  • 2023元宇宙AI架构师薪资曝光:北上广深需求翻倍,你值多少钱?
  • 计算机深度学习毕设实战-通过python-CNN卷积神经网络_pytorch框架对猫的类别识别
  • 内网环境下安装minio
  • PDD流程终止了
  • 【课程设计/毕业设计】基于python-CNN卷积神经网络对盆栽识别
  • 基于python卷积神经网络的淡水生物识别
  • 深度学习毕设项目推荐-基于python-CNN卷积神经网络对鸡和兔识别
  • 深度学习计算机毕设之基于python-CNN卷积神经网络对盆栽识别
  • 数据库性能优化全景实践与SQL示例,不改SQL也能提速百倍
  • c++-_-
  • 事关收入!拿到PMP®证书后,这几件事别忘了做!
  • 王阳明:如何重构崩盘的人生
  • 生产级支付系统实践指南:支付宝 微信全渠道 Java 实现
  • MySQL的日期时间类型
  • 大模型Prompt结构化:打造可解释、可扩展的稳定应用,开发必藏
  • 在深圳龙岗某电子厂流水线上,这套基恩士螺丝机组装设备已经稳定运行了5000+工时。作为厂里自动化升级的核心设备,它的运动控制程序藏着不少值得细品的实战技巧
  • 互联网大厂Java面试:从Java SE到微服务的技术深度探索
  • 深度学习毕设项目:基于python-CNN卷积神经网络对盆栽识别
  • 微信AI小程序“亿元计划”来了!你的APP如何一键接入,抢先变现?
  • 两句话理解 ElasticSearch 搜索引擎数据库的作用
  • 西门子PLC模拟量滤波程序:1200与1500通用的实用功能块