装饰器模式是一种结构型设计模式,它允许我们在不改变原有对象结构的情况下,动态地给对象添加新的功能。在本项目中,我们通过实现一个自定义注解 @TimestampRequestBody
来展示装饰器模式的应用。
- 实现了一个自定义注解
@TimestampRequestBody,用于增强@RequestBody的功能 - 在请求体反序列化后,自动注入当前时间戳字段
- 无需客户端显式传递时间戳,简化了API调用
-
自定义注解
@Target({ElementType.PARAMETER}) @Retention(RetentionPolicy.RUNTIME) @Documented public @interface TimestampRequestBody {}
-
参数解析器
- 继承
HandlerMethodArgumentResolver接口 - 装饰原有的
RequestResponseBodyMethodProcessor - 在解析完成后注入时间戳字段
- 继承
@PostMapping("/api/data")
public ResponseEntity<?> handleRequest(@TimestampRequestBody Map<String, Object> requestBody) {
// requestBody 中已自动包含 timestamp 字段
return ResponseEntity.ok(requestBody);
}- 功能增强: 在不修改原有代码的情况下扩展功能
- 灵活性: 可以动态地添加或移除功能
- 符合开闭原则: 对扩展开放,对修改关闭
- 代码复用: 通过组合方式复用现有功能