HandlerInterceptor中的preHandle的参数handler怎么获取到目标方法的入参
时间: 2023-06-05 10:05:04 浏览: 1287
可以通过HttpServletRequest的getInputStream()方法获取请求体中的参数,并根据参数类型进行转换。具体代码可以参考以下示例:
```
@Override
public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
if (handler instanceof HandlerMethod) {
HandlerMethod handlerMethod = (HandlerMethod) handler;
// 获取目标方法的参数列表
MethodParameter[] methodParameters = handlerMethod.getMethodParameters();
// 遍历参数列表,获取参数名和值
for (MethodParameter parameter : methodParameters) {
String paramName = parameter.getParameterName();
Object paramValue = parseParam(request, parameter);
// 将参数名和值存入ThreadLocal,方便后续使用
ParamContextHolder.set(paramName, paramValue);
}
}
return true;
}
private Object parseParam(HttpServletRequest request, MethodParameter parameter) throws Exception {
Class<?> paramType = parameter.getParameterType();
// 如果参数类型为HttpServletRequest或HttpServletResponse,直接返回null
if (HttpServletRequest.class.equals(paramType) || HttpServletResponse.class.equals(paramType)) {
return null;
}
// 如果参数类型为基础类型或String类型,直接从请求参数中获取
if (BeanUtils.isSimpleValueType(paramType)) {
return request.getParameter(parameter.getParameterName());
}
// 如果参数类型为自定义JavaBean,可以通过Jackson等工具进行反序列化
ObjectMapper objectMapper = new ObjectMapper();
return objectMapper.readValue(request.getInputStream(), paramType);
}
```
阅读全文