1. 定义
public interface RequestCondition<T> {
T combine(T other);
@Nullable
T getMatchingCondition(HttpServletRequest request);
int compareTo(T other, HttpServletRequest request);
}
请求映射条件的合同。
请求条件可以通过combine(Object)组合,通过getMatchingCondition(HttpServletRequest)与请求匹配,并通过compareTo(Object, HttpServletRequest) 相互比较,以确定哪个更接近于给定请求。
1.1 combine方法
将此条件与另一个条件(例如类型级别的条件)和方法级别@RequestMapping注释中的条件组合在一起。
1.2 getMatchingCondition方法
检查条件是否与返回为当前请求创建的潜在新实例的请求匹配。例如,具有多个URL模式的条件只能返回与请求匹配的模式的新实例。
对于CORS飞行前请求,条件应与预期、实际请求(例如URL模式、查询参数和“访问控制请求方法”标题中的HTTP方法)匹配。如果条件无法与飞行前请求匹配,则应返回一个包含空内容的实例,从而不会导致匹配失败。
1.3 compareTo方法
将此条件与特定请求上下文中的另一个条件进行比较。此方法假设这两个实例都是通过getMatchingCondition(HttpServletRequest)获得的,以确保它们只包含与当前请求相关的内容。
2. 实现类
![](https://img.haomeiwen.com/i5340978/2eafa91eb29fa5aa.png)
AbstractRequestCondition抽象类的实现类除了图上的4个外,还包括ConsumesRequestCondition、RequestConditionHolder、HeadersRequestCondition、CompositeRequestCondition。
网友评论