You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Spring Boot测试中如何复用RestController的反序列化规则处理JTS Geometry

解决方案

核心原因

Spring Boot @RestController 反序列化时能正常处理JTS Geometry 类型,是因为Spring的自动配置默认已经为全局Jackson ObjectMapper 注册了JTS类型序列化/反序列化模块,你自行创建的Gson实例、裸ObjectMapper实例都没有对应的JTS类型处理能力,所以报错。

实现方案

方案1:直接注入Spring全局ObjectMapper(推荐,和接口反序列化效果完全一致)

如果你是在Spring托管的代码(包括Spring Boot Test测试类)中使用,直接注入Spring自动配置好的ObjectMapper即可,不用做任何额外配置:

// 任何Spring托管类/测试类中注入
@Autowired
lateinit var objectMapper: ObjectMapper

// 直接使用即可正常反序列化
val polygonDto = objectMapper.readValue(json, PolygonDto::class.java)

方案2:手动构造和Spring效果一致的ObjectMapper

如果是非Spring环境下使用,只需要手动注册JTS Jackson模块即可,无需自行实现反序列化器:

  1. 首先确保已引入JTS Jackson模块依赖(Spring环境下如果接口能正常工作,该依赖已经存在):
    Maven依赖:
<dependency>
    <groupId>com.bedatadriven</groupId>
    <artifactId>jackson-datatype-jts</artifactId>
    <version>2.14</version>
</dependency>

Gradle依赖:

implementation 'com.bedatadriven:jackson-datatype-jts:2.14'
  1. 构造ObjectMapper时注册JtsModule:
val objectMapper = ObjectMapper().registerModule(JtsModule())
val polygonDto = objectMapper.readValue(json, PolygonDto::class.java)

补充说明

你之前用Gson报错的原因有两个:

  • Spring默认序列化框架是Jackson不是Gson,Gson本身没有内置JTS类型处理能力
  • 你的GsonBuilder写法错误,registerTypeAdapter第二个参数需要传入TypeAdapter实例,而不是Gson实例,属于API用法错误

内容的提问来源于stack exchange,提问作者Bellkross

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.07 02:36:02