springboot 切面 读取入参输入流 并且转换成 list
时间: 2023-09-16 22:12:53 浏览: 165
可以使用 Spring AOP 拦截请求,通过 RequestContextHolder 获取 HttpServletRequest 对象,从而获取请求体的输入流,然后将输入流转换成字符串,最后将字符串转换成 List 对象。具体实现可以参考以下代码:
```java
@Aspect
@Component
public class MyAspect {
@Pointcut("execution(* com.example.controller.*.*(..))")
public void pointcut() {}
@Around("pointcut()")
public Object around(ProceedingJoinPoint point) throws Throwable {
ServletRequestAttributes attributes = (ServletRequestAttributes) RequestContextHolder.getRequestAttributes();
HttpServletRequest request = attributes.getRequest();
String requestBody = getRequestBody(request);
List<Object> list = convertToList(requestBody);
// 对 list 进行处理
Object result = point.proceed();
return result;
}
private String getRequestBody(HttpServletRequest request) throws IOException {
BufferedReader reader = request.getReader();
StringBuilder stringBuilder = new StringBuilder();
String line;
while ((line = reader.readLine()) != null) {
stringBuilder.append(line);
}
return stringBuilder.toString();
}
private List<Object> convertToList(String requestBody) {
// 将 requestBody 转换成 List 对象
// ...
return list;
}
}
```
以上代码中,`@Pointcut` 注解定义了切入点,`@Around` 注解定义了环绕通知,通过 `RequestContextHolder` 获取当前请求的 HttpServletRequest 对象,然后通过 `getRequestBody` 方法获取请求体的输入流,并将输入流转换成字符串,最后通过 `convertToList` 方法将字符串转换成 List 对象。
阅读全文