【问题标题】:How to deserialize / serialize type Geometry in spring boot?如何在 Spring Boot 中反序列化/序列化类型 Geometry?
【发布时间】:2019-11-13 15:22:48
【问题描述】:

我有一个具有 MultiPolygon 和 Point 类型属性的实体;所以我正在发出一个获取请求,但这会返回一个 SerializationException。

我研究了一下,看到我要放一些注释,创建一个配置类并将对应的依赖放在pom.xml中。按照我在下面做的:

实体:

package com.zxventures.model;

@Entity
@Table(name = "pdv")
public class PDV implements Serializable {

private static final long serialVersionUID = 1L;

 @Column(name="coverage_area")
 @JsonSerialize(using = GeometrySerializer.class)
 @JsonDeserialize(contentUsing = GeometryDeserializer.class)
 private MultiPolygon coverageArea;

 @Column(name="address")
 @JsonSerialize(using = GeometrySerializer.class)
 @JsonDeserialize(contentUsing = GeometryDeserializer.class)
 private Point address;
}

配置类:

package com.zxventures.config;

@Configuration
public class JacksonConfig {

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

pom.xml:

<dependency>
<groupId>com.bedatadriven</groupId>
<artifactId>jackson-datatype-jts</artifactId>
<version>2.4</version>
</dependency>

异常发生:

could not deserialize; nested exception is 
org.hibernate.type.SerializationException: could not deserialize

我想我遗漏了一些代码,但我无法检测到它;我想我把我看到的所有代码都放在了类似的问题中。

【问题讨论】:

  • 异常的其余部分是什么?
  • @RoddyoftheFrozenPeas 请求处理失败;嵌套异常是 org.springframework.orm.jpa.JpaSystemException:无法反序列化;嵌套异常是 org.hibernate.type.SerializationException: could not deserialize] 根本原因 java.io.StreamCorruptedException: invalid stream header: 00000000
  • 你好像混淆了Java序列化和JSON序列化。
  • @chrylis 不,我没有混淆;该错误仅在我反序列化那些特定类型的字段时发生......当我省略它们时,它工作得很好......这不是问题。
  • Jackson 与错误消息中的序列化类型没有任何关系。

标签: java json spring-boot geometry json-deserialization


【解决方案1】:

我遇到了同样的问题,并在下面的行中添加了 application.properties 然后它可以工作了。

spring.jpa.database-platform=org.hibernate.spatial.dialect.postgis.PostgisDialect

【讨论】:

    【解决方案2】:

    您正在使用空间数据类型,因此需要包含以下依赖项才能工作

    <dependency>
      <groupId>org.hibernate</groupId>
      <artifactId>hibernate-spatial</artifactId>
    </dependency>
    

    并相应地改变方言,例如org.hibernate.spatial.dialect.mysql.MySQL56InnoDBSpatialDialect

    Spatial data types

    【讨论】:

    • 放这些sn-ps后,我现在得到一个java.io.StreamCorruptedException: invalid stream header: 00000000我研究过,但是我没有找到任何空间类型的解决方案。
    • 宾果游戏!除了你所说的,我不得不将import org.geojson.MultiPolygon; import org.geojson.Point; 更改为import com.vividsolutions.jts.geom.MultiPolygon; import com.vividsolutions.jts.geom.Point; 非常感谢!
    猜你喜欢
    • 2019-04-03
    • 2015-09-01
    • 2020-02-22
    • 1970-01-01
    • 1970-01-01
    • 2010-12-17
    • 1970-01-01
    • 1970-01-01
    • 2018-01-24
    相关资源
    最近更新 更多