gpt4 book ai didi

java - Jackson 在 Spring Boot 中反序列化 GeoJson Point

转载 作者:搜寻专家 更新时间:2023-11-01 02:58:16 24 4
gpt4 key购买 nike

我有一个 @Entity 模型,它的属性类型为 com.vividsolutions.jts.geom.Point。当我尝试在 @RestController 中呈现此模型时,出现递归异常。

(StackOverflowError); nested exception is 
com.fasterxml.jackson.databind.JsonMappingException: Infinite
recursion (StackOverflowError) (through reference chain:
com.vividsolutions.jts.geom.Point[\"envelope\"]-
>com.vividsolutions.jts.geom.Point[\"envelope\"]....

实体看起来像这样(为简洁起见缩短):

@Entity
@Data
public class MyEntity{
// ...
@Column(columnDefinition = "geometry")
private Point location;
// ...
}

经过一番研究,我发现这是因为 Jackson 默认无法反序列化 GeoJson。添加此库应该可以解决问题:https://github.com/bedatadriven/jackson-datatype-jts .

我现在不确定如何将此模块包含在 spring boot 的对象映射器中。根据引导中的文档,我尝试通过以下两种方式将其添加到 @Configuration 中:

@Bean
public Jackson2ObjectMapperBuilder jacksonBuilder() {
Jackson2ObjectMapperBuilder builder = new Jackson2ObjectMapperBuilder();
builder.modulesToInstall(new JtsModule());
return builder;
}

@Bean
public JtsModule jtsModule(){
return new JtsModule();
}

两者都没有删除异常。对不起,如果这是重复的,但我能找到的所有东西都是自定义 ObjectMapper,根据我对文档的理解,这不是“spring boot 方式”。

作为解决方法,我正在 @JsonIgnoreing Point 并为不存在的协调对象设置自定义 getter 和 setter,...但这不是我的方式我想保留它。

最佳答案

截至 2020 年,大多数 JTS 库都已过时且不再有效。我在 Maven Central 上发现了一个最近更新的分支,它与 jackson-core:2.10.0jts-core:1.16.1 完美配合:

实现'org.n52.jackson:jackson-datatype-jts:1.2.4'

示例用法:

    @Test
void testJson() throws IOException {

var objectMapper = new ObjectMapper();
objectMapper.registerModule(new JtsModule());

GeometryFactory gf = new GeometryFactory();
Point point = gf.createPoint(new Coordinate(1.2345678, 2.3456789));

String geojson = objectMapper.writeValueAsString(point);

InputStream targetStream = new ByteArrayInputStream(geojson.getBytes());
Point point2 = objectMapper.readValue(targetStream, Point.class);

assertEquals(point, point2);
}

您不需要在类字段上使用任何注释或注册新的 Spring Beans,只需向 Jackson 注册 JTS 模块即可。

关于java - Jackson 在 Spring Boot 中反序列化 GeoJson Point,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45713934/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com