替换 org.n52 JtsModule(适用于 Jackson 3):引入 io.github.aytronnfr.jackson.jts.JtsModule
Source: Dev.to
TL;DR
jts-jackson3-module 为 Jackson 3 上的 JTS 提供 GeoJSON 序列化/反序列化。
它面向使用 tools.jackson.* 的 Spring Boot 4.x 项目,并包含往返和兼容性测试,以降低迁移风险。
为什么会有这个模块
Spring Boot 4 迁移到 Jackson 3,许多基于 Jackson 2 包名的旧 JSON 模块已不再适配。
对于 JTS 几何对象,这会阻碍迁移或迫使使用临时且丑陋的变通方案。
该模块提供了一个即插即用的迁移路径,适用于需要:
- 对
org.locationtech.jts几何对象的原生支持, - GeoJSON 读写行为,
- 现代化的构建/发布工作流(GitHub Packages + Maven Central)。
兼容目标
jts-jackson3-module 构建针对:
- Spring Boot 4.x
- Jackson 3 (
tools.jackson.*) - JTS (
org.locationtech.jts)
依赖
dependencies {
implementation("io.github.aytronnfr:jts-jackson3-module:0.1.0")
}
基本用法
import io.github.aytronnfr.jackson.jts.JtsModule;
import tools.jackson.databind.json.JsonMapper;
import org.locationtech.jts.geom.GeometryFactory;
import org.locationtech.jts.geom.PrecisionModel;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
@Configuration
public class JsonConfig {
@Bean
public GeometryFactory geometryFactory() {
return new GeometryFactory(new PrecisionModel(), 4326);
}
public static void configJsonMapper(GeometryFactory geometryFactory,
JsonMapper.Builder builder) {
// 1) Modules
builder.addModule(new JtsModule(geometryFactory));
// ...
}
}
这就足以在 Jackson 3 环境中开始对 JTS 几何对象进行序列化/反序列化。
高级用法:为选定几何类型包含 bbox
import io.github.aytronnfr.jackson.jts.GeometryType;
import io.github.aytronnfr.jackson.jts.IncludeBoundingBox;
import io.github.aytronnfr.jackson.jts.JtsModule;
var module = new JtsModule(
IncludeBoundingBox.forTypes(GeometryType.POINT), 8);
通过此方式可以为特定几何类控制输出精度和包围盒行为。
从 org.n52... 模块迁移的注意事项
迁移时请按以下顺序操作:
- 将依赖替换为
io.github.aytronnfr:jts-jackson3-module。 - 在 Jackson 3 的
JsonMapper配置中注册new JtsModule()。 - 对现有 API 负载夹具运行契约测试。
- 验证边缘情况:精度、bbox 输出、空几何处理。
- 若地理空间负载面向客户,先在金丝雀环境中发布。
项目使用的测试策略
仓库中包含:
- 往返测试,验证 Jackson 3 行为,
- 兼容性测试,对比旧的
org.n52.jackson:jackson-datatype-jts:2.0.0, - 共享夹具用于确定性比较。
这些测试可防止细微回归(顺序、精度、bbox 形状),避免下游消费者在不知情的情况下出错。
CI/CD 与发布
GitHub Actions 已配置:
- 推送/PR 时的 CI,
- 在版本标签时自动发布,
- 手动发布流程。
发布目标:
- GitHub Packages
- Maven Central
对 Boot 4 团队的实际影响
在真实迁移中,该模块消除了关键阻碍:在应用其余部分已迁移到 Jackson 3 时,仍需依赖旧模块假设。
你可以在不冻结平台升级的情况下,继续使用地理空间负载能力。
下一步计划
路线图项目:
- 扩展兼容性夹具,
- 对大规模几何集合进行序列化性能基准测试,
- 为常见 Spring Boot 配置编写迁移方案文档。
如果你正在将 GIS 重度 API 迁移到 Boot 4,欢迎提供反馈和提交 issue。
Repository: