HandlerMethodArgumentResolver
1、策略接口:用于在给定请求的上下文中将方法参数解析为参数值,它是HandlerMethod方法的解析器,将HttpServletRequest解析为HandlerMethod方法的参数。
public interface HandlerMethodArgumentResolver {
/**
* 功能描述: 判断是否支持 MethodParameter
* 〈〉
* @Param:
* @Return:
* @Author: Steven
* @Date: 2020/12/15 11:47
*/
boolean supportsParameter(MethodParameter parameter);
/**
* 功能描述: 用于数据绑定解析请求参数
* 〈〉
* @Param:
* @Return:
* @Author: Steven
* @Date: 2020/12/15 11:47
*/
Object resolveArgument(MethodParameter parameter, @Nullable ModelAndViewContainer mavContainer, NativeWebRequest webRequest, @Nullable WebDataBinderFactory binderFactory) throws Exception;
}
2、
public class SqlFilterArgumentResolver implements HandlerMethodArgumentResolver {
/**
* 功能描述: 判断controller请求参数中是否包含 CurrentUser
* 〈〉
* @Param:
* @Return:
* @Author: Steven
* @Date: 2020/12/15 11:47
*/
@Override
public boolean supportsParameter(MethodParameter parameter) {
return parameter.getParameterType().equals(CurrentUser.class);
}
/**
* 功能描述: 获取获取请求体重的报文、解析
* 〈〉
* @Param:
* @Return:
* @Author: Steven
* @Date: 2020/12/15 11:47
*/
@Override
public Object resolveArgument(MethodParameter parameter, ModelAndViewContainer mavContainer,
NativeWebRequest webRequest, WebDataBinderFactory binderFactory) {
Optional.ofNullable(descs).ifPresent(s -> orderItemList.addAll( Arrays.stream(s).filter(sqlInjectPredicate()).map(OrderItem::desc).collect(Collectors.toList())));
}
/**
* 功能描述: 处理查询关键字
* 〈〉
* @Param:
* @Return:
* @Author: Steven
* @Date: 2020/12/15 11:47
*/
private Predicate<String> sqlInjectPredicate() {
return sql -> {
for (String keyword : KEYWORDS) {
if (StrUtil.containsIgnoreCase(sql, keyword)){
return false;
}
}
return true;
}
}
}
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。