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模块即可,无需自行实现反序列化器:
- 首先确保已引入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'
- 构造
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
相关产品推荐
相关产品推荐

