SpringBoot 使用【AOP 切面+注解】实现在请求调用 Controller 方法前修改请求参数和在结果返回之前修改返回结果
在Spring Boot中,你可以使用AOP(面向切面编程)来创建一个切面,在切面中的特定连接点(比如Controller方法调用前)修改请求参数。以下是一个简单的例子:
- 首先,创建一个自定义注解来标记需要修改参数的方法:
@Target(ElementType.METHOD)
@Retention(RetentionPolicy.RUNTIME)
public @interface ModifyRequestParam {
// 可以添加属性来定义如何修改参数
}
- 创建一个切面类来处理注解:
@Aspect
@Component
public class ModifyRequestParamAspect {
@Around("@annotation(ModifyRequestParam)")
public Object aroundAdvice(ProceedingJoinPoint joinPoint) throws Throwable {
// 在这里修改参数
// 获取方法参数
Object[] args = joinPoint.getArgs();
for (int i = 0; i < args.length; i++) {
if (args[i] instanceof HttpServletRequest) {
HttpServletRequest request = (HttpServletRequest) args[i];
// 修改请求参数的逻辑
// 例如: 修改一个特定的参数
String newValue = "newValue"; // 新值
request.getParameterMap().put("paramName", new String[]{newValue});
}
}
// 继续执行原方法,传入修改后的参数
return joinPoint.proceed(args);
}
}
- 在Controller方法上使用
@ModifyRequestParam
注解:
@RestController
public class MyController {
@ModifyRequestParam
@GetMapping("/myEndpoint")
public String myMethod(@RequestParam("paramName") String paramValue) {
// 方法逻辑
return "Response with modified param";
}
}
请注意,上述代码是一个简化示例,并且假设你只需要修改一个特定的参数。在实际应用中,你可能需要根据需求修改HttpServletRequest
的参数或者采取其他策略来处理复杂的参数修改需求。
评论已关闭