替换 org.n52 JtsModule(适用于 Jackson 3):引入 io.github.aytronnfr.jackson.jts.JtsModule

发布: (2026年2月20日 GMT+8 23:59)
4 分钟阅读
原文: Dev.to

Source: Dev.to

TL;DR

jts-jackson3-moduleJackson 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... 模块迁移的注意事项

迁移时请按以下顺序操作:

  1. 将依赖替换为 io.github.aytronnfr:jts-jackson3-module
  2. 在 Jackson 3 的 JsonMapper 配置中注册 new JtsModule()
  3. 对现有 API 负载夹具运行契约测试。
  4. 验证边缘情况:精度、bbox 输出、空几何处理。
  5. 若地理空间负载面向客户,先在金丝雀环境中发布。

项目使用的测试策略

仓库中包含:

  • 往返测试,验证 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:

0 浏览
Back to Blog

相关文章

阅读更多 »