Jackson/Spring泛型子类反序列化问题(Kotlin环境)
看起来你已经搭建了一个很棒的基础框架!我帮你补全并优化了这套轴过滤器的实现,让它更贴合Kotlin+Spring的使用场景:
// 抽象基类:定义所有轴过滤器的通用类型边界 abstract class AxisFilter<T : Comparable<T>>() // 单轴过滤器:基于单一值的过滤逻辑 data class SingleAxisFilter<T : Comparable<T>>( val value: T, val isAbove: Boolean?, // null 表示不限制上下方向 val isMatch: Boolean // 是否需要精确匹配value ) : AxisFilter<T>() // 双轴过滤器:基于范围的过滤逻辑 data class DualAxisFilter<T : Comparable<T>>( val lowerBound: T, val upperBound: T, val includeBounds: Boolean = true // 可选参数:是否包含边界值,默认true ) : AxisFilter<T>()
关键细节说明:
- 抽象基类
AxisFilter<T>:通过泛型约束T : Comparable<T>,确保所有子类的过滤值都支持比较操作,这是实现区间、大小过滤的基础。作为抽象类,它只承担类型标记的作用,不需要实现具体方法。 SingleAxisFilter:适用于单一值的过滤场景,比如"筛选价格大于100的商品"或者"精确匹配ID为123的用户"。isAbove设为null时,可以只启用精确匹配逻辑,灵活度很高。DualAxisFilter:专门处理范围过滤,比如"筛选年龄在18-30之间的用户"。新增的includeBounds参数是一个实用优化,让你可以选择是否包含上下边界(比如是否包含刚好18岁或30岁的用户)。
Spring环境下的使用小提示:
因为都是Kotlin的data class,它们天生具备良好的序列化/反序列化能力,你可以直接用@ModelAttribute接收前端传来的过滤参数,或者作为@RequestBody的请求体对象,Spring会自动处理参数绑定。
内容的提问来源于stack exchange,提问作者Dante
相关产品推荐
相关产品推荐

