2016-10-28 34 views
3

我正在研究一个Spring Boot项目,我正在尝试正确映射一个MySql DB(它是MariaDB,但它是同一件事......)的一个字段。为什么我不能使用Hibernate5 Spring Data JPA检索数据库字段havin“point”作为数据类型到这个Spring Boot项目中?

检索我正在使用的数据Spring Data JPA on Hibernate 5

我有我的DB此住宿表:

Field       Type       Null   Key    Default    Extra 
id        bigint(20) unsigned    NO    PRI    NULL    auto_increment 
user_id       bigint(20) unsigned    NO    MUL    NULL  
accomodation_name    varchar(255)     NO    NULL  
description      text       NO    NULL  
nation       varchar(255)     NO    NULL  
region       varchar(255)     NO    NULL  
province      varchar(255)     NO    NULL  
city       varchar(255)     NO    NULL  
geographical_position   point       NO    NULL  
stars       int(10)       NO    NULL  
accomodation_typological_id  bigint(20) unsigned    YES    NULL  
accomodation_service_id   bigint(20) unsigned    YES    NULL  
phone       varchar(255)     YES    NULL  
mobile       varchar(255)     YES    NULL  
fax        varchar(255)     YES    NULL  
email       varchar(255)     YES    NULL  
time_stamp      datetime      YES    NULL  

正如你可以看到这个表包含具有数据类型geographical_position场(beloning到MySql opengGIS实现)。

上表是由这住宿类映射:

import com.vividsolutions.jts.geom.Point; 
import org.hibernate.annotations.Type; 

import javax.persistence.*; 
import java.io.Serializable; 
import java.math.BigInteger; 
import java.util.List; 

/** 
* Created by Yngve on 30/09/16. 
*/ 
@Entity 
@Table(name = "accomodation") 
public class Accomodation implements Serializable { 


    @Id 
    @GeneratedValue(strategy = GenerationType.IDENTITY) 
    @Column(name = "id") 
    private Long id; 

    /*@ManyToOne 
    private Users users; 
    */ 

    @OneToMany(mappedBy = "accomodation") 
    private List<Room> rooms; 

    @Column(name = "accomodation_name") 
    private String name; 

    @Column(name = "description") 
    @Type(type="text") 
    private String description; 
    private String phone; 
    private String mobile; 
    private String fax; 
    private String email; 
    private Integer stars; 

    @Column(name = "geographical_position", columnDefinition="Point") 
    private Point location; 


    public Accomodation(){ 

    } 

    // GETTER AND SETTER METHODS 
} 

正如你可以看到桌子上的前一个点场由本场映射在我的Java类:

@Column(name = "geographical_position", columnDefinition="Point") 
private Point location; 

在前面的代码片段我也插入了导入的使用实现的Point提供的(我在一些教程中发现它):

import com.vividsolutions.jts.geom.Point; 

但我绝对不确定这是否是必须使用的正确类。

这是我的DAO类实现了Spring数据JPA查询(被Spring数据JPA使用方法签名生成的查询):

@Repository 
@Transactional(propagation = Propagation.MANDATORY) 
public interface AccomodationDAO extends JpaRepository<Accomodation, Long> { 

    //@Query("FROM Accomodation WHERE id = :id") 
    Accomodation findById(@Param("id") Long id); 
} 

的问题是,测试使用该以前的DAO方法JUnuit测试方法:

@Test 
public void placeSearcherControllerTest() { 
    System.out.println("placeSearcherControllerTest START"); 

    Accomodation accomodation = accomodationDAO.findById(6L); 

    System.out.println("placeSearcherControllerTest END"); 
} 

我在的IntelliJ控制台获得以下错误消息:

Hibernate: select accomodati0_.id as id1_0_, accomodati0_.description as descript2_0_, accomodati0_.email as email3_0_, accomodati0_.fax as fax4_0_, accomodati0_.geographical_position as geograph5_0_, accomodati0_.mobile as mobile6_0_, accomodati0_.accomodation_name as accomoda7_0_, accomodati0_.phone as phone8_0_, accomodati0_.stars as stars9_0_ from accomodation accomodati0_ where accomodati0_.id=? 

org.springframework.orm.jpa.JpaSystemException: could not deserialize; nested exception is org.hibernate.type.SerializationException: could not deserialize 

    at org.springframework.orm.jpa.vendor.HibernateJpaDialect.convertHibernateAccessException(HibernateJpaDialect.java:333) 
    at org.springframework.orm.jpa.vendor.HibernateJpaDialect.translateExceptionIfPossible(HibernateJpaDialect.java:244) 
    at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.translateExceptionIfPossible(AbstractEntityManagerFactoryBean.java:491) 
    at org.springframework.dao.support.ChainedPersistenceExceptionTranslator.translateExceptionIfPossible(ChainedPersistenceExceptionTranslator.java:59) 
    at org.springframework.dao.support.DataAccessUtils.translateIfNecessary(DataAccessUtils.java:213) 
    at org.springframework.dao.support.PersistenceExceptionTranslationInterceptor.invoke(PersistenceExceptionTranslationInterceptor.java:147) 
    at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:179) 
    at org.springframework.data.jpa.repository.support.CrudMethodMetadataPostProcessor$CrudMethodMetadataPopulatingMethodInterceptor.invoke(CrudMethodMetadataPostProcessor.java:133) 
    at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:179) 
    at org.springframework.aop.interceptor.ExposeInvocationInterceptor.invoke(ExposeInvocationInterceptor.java:92) 
    at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:179) 
    at org.springframework.aop.framework.JdkDynamicAopProxy.invoke(JdkDynamicAopProxy.java:213) 
    at com.sun.proxy.$Proxy112.findById(Unknown Source) 
    at com.betriuvis.controller.test.PlaceSearcherControllerTest.placeSearcherControllerTest(PlaceSearcherControllerTest.java:58) 
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) 
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) 
    at java.lang.reflect.Method.invoke(Method.java:497) 
    at org.junit.runners.model.FrameworkMethod$1.runReflectiveCall(FrameworkMethod.java:50) 
    at org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:12) 
    at org.junit.runners.model.FrameworkMethod.invokeExplosively(FrameworkMethod.java:47) 
    at org.junit.internal.runners.statements.InvokeMethod.evaluate(InvokeMethod.java:17) 
    at org.springframework.test.context.junit4.statements.RunBeforeTestMethodCallbacks.evaluate(RunBeforeTestMethodCallbacks.java:75) 
    at org.springframework.test.context.junit4.statements.RunAfterTestMethodCallbacks.evaluate(RunAfterTestMethodCallbacks.java:86) 
    at org.springframework.test.context.junit4.statements.SpringRepeat.evaluate(SpringRepeat.java:84) 
    at org.junit.runners.ParentRunner.runLeaf(ParentRunner.java:325) 
    at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.runChild(SpringJUnit4ClassRunner.java:252) 
    at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.runChild(SpringJUnit4ClassRunner.java:94) 
    at org.junit.runners.ParentRunner$3.run(ParentRunner.java:290) 
    at org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:71) 
    at org.junit.runners.ParentRunner.runChildren(ParentRunner.java:288) 
    at org.junit.runners.ParentRunner.access$000(ParentRunner.java:58) 
    at org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:268) 
    at org.springframework.test.context.junit4.statements.RunBeforeTestClassCallbacks.evaluate(RunBeforeTestClassCallbacks.java:61) 
    at org.springframework.test.context.junit4.statements.RunAfterTestClassCallbacks.evaluate(RunAfterTestClassCallbacks.java:70) 
    at org.junit.runners.ParentRunner.run(ParentRunner.java:363) 
    at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.run(SpringJUnit4ClassRunner.java:191) 
    at org.junit.runner.JUnitCore.run(JUnitCore.java:137) 
    at com.intellij.junit4.JUnit4IdeaTestRunner.startRunnerWithArgs(JUnit4IdeaTestRunner.java:117) 
    at com.intellij.junit4.JUnit4IdeaTestRunner.startRunnerWithArgs(JUnit4IdeaTestRunner.java:42) 
    at com.intellij.rt.execution.junit.JUnitStarter.prepareStreamsAndStart(JUnitStarter.java:262) 
    at com.intellij.rt.execution.junit.JUnitStarter.main(JUnitStarter.java:84) 
Caused by: org.hibernate.type.SerializationException: could not deserialize 
    at org.hibernate.internal.util.SerializationHelper.doDeserialize(SerializationHelper.java:243) 
    at org.hibernate.internal.util.SerializationHelper.deserialize(SerializationHelper.java:287) 
    at org.hibernate.type.descriptor.java.SerializableTypeDescriptor.fromBytes(SerializableTypeDescriptor.java:138) 
    at org.hibernate.type.descriptor.java.SerializableTypeDescriptor.wrap(SerializableTypeDescriptor.java:113) 
    at org.hibernate.type.descriptor.java.SerializableTypeDescriptor.wrap(SerializableTypeDescriptor.java:27) 
    at org.hibernate.type.descriptor.sql.VarbinaryTypeDescriptor$2.doExtract(VarbinaryTypeDescriptor.java:60) 
    at org.hibernate.type.descriptor.sql.BasicExtractor.extract(BasicExtractor.java:47) 
    at org.hibernate.type.AbstractStandardBasicType.nullSafeGet(AbstractStandardBasicType.java:238) 
    at org.hibernate.type.AbstractStandardBasicType.nullSafeGet(AbstractStandardBasicType.java:234) 
    at org.hibernate.type.AbstractStandardBasicType.nullSafeGet(AbstractStandardBasicType.java:224) 
    at org.hibernate.type.AbstractStandardBasicType.hydrate(AbstractStandardBasicType.java:300) 
    at org.hibernate.persister.entity.AbstractEntityPersister.hydrate(AbstractEntityPersister.java:2738) 
    at org.hibernate.loader.Loader.loadFromResultSet(Loader.java:1729) 
    at org.hibernate.loader.Loader.instanceNotYetLoaded(Loader.java:1655) 
    at org.hibernate.loader.Loader.getRow(Loader.java:1544) 
    at org.hibernate.loader.Loader.getRowFromResultSet(Loader.java:727) 
    at org.hibernate.loader.Loader.processResultSet(Loader.java:972) 
    at org.hibernate.loader.Loader.doQuery(Loader.java:930) 
    at org.hibernate.loader.Loader.doQueryAndInitializeNonLazyCollections(Loader.java:336) 
    at org.hibernate.loader.Loader.doList(Loader.java:2617) 
    at org.hibernate.loader.Loader.doList(Loader.java:2600) 
    at org.hibernate.loader.Loader.listIgnoreQueryCache(Loader.java:2429) 
    at org.hibernate.loader.Loader.list(Loader.java:2424) 
    at org.hibernate.loader.hql.QueryLoader.list(QueryLoader.java:501) 
    at org.hibernate.hql.internal.ast.QueryTranslatorImpl.list(QueryTranslatorImpl.java:371) 
    at org.hibernate.engine.query.spi.HQLQueryPlan.performList(HQLQueryPlan.java:216) 
    at org.hibernate.internal.SessionImpl.list(SessionImpl.java:1326) 
    at org.hibernate.internal.QueryImpl.list(QueryImpl.java:87) 
    at org.hibernate.jpa.internal.QueryImpl.list(QueryImpl.java:606) 
    at org.hibernate.jpa.internal.QueryImpl.getSingleResult(QueryImpl.java:529) 
    at org.hibernate.jpa.criteria.compile.CriteriaQueryTypeQueryAdapter.getSingleResult(CriteriaQueryTypeQueryAdapter.java:54) 
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) 
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) 
    at java.lang.reflect.Method.invoke(Method.java:497) 
    at org.springframework.orm.jpa.SharedEntityManagerCreator$DeferredQueryInvocationHandler.invoke(SharedEntityManagerCreator.java:372) 
    at com.sun.proxy.$Proxy119.getSingleResult(Unknown Source) 
    at org.springframework.data.jpa.repository.query.JpaQueryExecution$SingleEntityExecution.doExecute(JpaQueryExecution.java:210) 
    at org.springframework.data.jpa.repository.query.JpaQueryExecution.execute(JpaQueryExecution.java:82) 
    at org.springframework.data.jpa.repository.query.AbstractJpaQuery.doExecute(AbstractJpaQuery.java:114) 
    at org.springframework.data.jpa.repository.query.AbstractJpaQuery.execute(AbstractJpaQuery.java:104) 
    at org.springframework.data.repository.core.support.RepositoryFactorySupport$QueryExecutorMethodInterceptor.doInvoke(RepositoryFactorySupport.java:482) 
    at org.springframework.data.repository.core.support.RepositoryFactorySupport$QueryExecutorMethodInterceptor.invoke(RepositoryFactorySupport.java:460) 
    at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:179) 
    at org.springframework.data.projection.DefaultMethodInvokingMethodInterceptor.invoke(DefaultMethodInvokingMethodInterceptor.java:61) 
    at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:179) 
    at org.springframework.transaction.interceptor.TransactionInterceptor$1.proceedWithInvocation(TransactionInterceptor.java:99) 
    at org.springframework.transaction.interceptor.TransactionAspectSupport.invokeWithinTransaction(TransactionAspectSupport.java:281) 
    at org.springframework.transaction.interceptor.TransactionInterceptor.invoke(TransactionInterceptor.java:96) 
    at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:179) 
    at org.springframework.dao.support.PersistenceExceptionTranslationInterceptor.invoke(PersistenceExceptionTranslationInterceptor.java:136) 
    ... 36 more 
Caused by: java.io.StreamCorruptedException: invalid stream header: 00000000 
    at java.io.ObjectInputStream.readStreamHeader(ObjectInputStream.java:806) 
    at java.io.ObjectInputStream.<init>(ObjectInputStream.java:299) 
    at org.hibernate.internal.util.SerializationHelper$CustomObjectInputStream.<init>(SerializationHelper.java:309) 
    at org.hibernate.internal.util.SerializationHelper$CustomObjectInputStream.<init>(SerializationHelper.java:299) 
    at org.hibernate.internal.util.SerializationHelper.doDeserialize(SerializationHelper.java:218) 
    ... 86 more 

的问题肯定是在住宿类引起的映射:

@Column(name = "geographical_position", columnDefinition="Point") 
private Point location; 

,因为如果我从我的实体类中删除这个领域我也不例外,我正确地检索住宿对象(不包含位置字段)。

看看前面的错误输出我可以看到,Hibernate来生成这个SQL查询:

select accomodati0_.id as id1_0_, accomodati0_.description as descript2_0_, accomodati0_.email as email3_0_, accomodati0_.fax as fax4_0_, accomodati0_.geographical_position as geograph5_0_, accomodati0_.mobile as mobile6_0_, accomodati0_.accomodation_name as accomoda7_0_, accomodati0_.phone as phone8_0_, accomodati0_.stars as stars9_0_ from accomodation accomodati0_ where accomodati0_.id=6 

直接在我的数据库,执行我获得正确的记录。正如前面领域的内容,我可以看到这个值[几何 - 25 B](拿什么25×B?)那是下载一个名为accomodation- geographical_position.bin文件。

执行对DB这样其他查询:

select id, AsText(geographical_position) from accomodation where id = 6 

我正确obtatin包含在我的geographical_position场坐标,事实上这个我所得到的查询输出:

id  AsText(geographical_position) 
-------------------------------------- 
6  POINT(41.729086 12.278478) 

所以数据被正确存储在具有作为数据类型的geographic_position中。

所以,问题是关系到geographical_position场映射到我的实体类的点位置

搜索的计算器,在我看来,该org.hibernate.type.SerializationException:无法反序列化例外东西happing当Hibernate不能把一个字段的值到一个特定的Java对象,所以我有一些怀疑相关进口com.vividsolutions.jts.geom.Point的一类映射数据库字段(也许这是对的或旧的版本Hibrnate空间的这样的东西的一类?)

或者也许它可能是一个弹簧引导配置问题,所以我把这里也是我的appliction.properties文件代表我的整个应用程序配置:

#No auth protected 
endpoints.shutdown.sensitive=true 
#Enable shutdown endpoint 
endpoints.shutdown.enabled=true 
logging.file=BeTriviusController.log 
logging.level.org.springframework.web=DEBUG 
logging.level.org.hibernate=ERROR 

# Thymeleaf 
spring.thymeleaf.cache:false 


# DATABASE CONFIG ---------------------------------------------------------------------------------------------------- 
spring.datasource.url = jdbc:mysql://localhost:3306/betriviustest 
spring.datasource.username = root 
spring.datasource.password = 
spring.datasource.driver-class-name = com.mysql.jdbc.Driver 
spring.jpa.properties.hibernate.current_session_context_class=org.springframework.orm.hibernate4.SpringSessionContext 

spring.datasource.testWhileIdle = true 
spring.datasource.validationQuery = SELECT 1 

# Show or not log for each sql query 
spring.jpa.show-sql = true 

# Hibernate ddl auto (create, create-drop, update, validate) 
spring.jpa.hibernate.ddl-auto = validate 

#spring.jpa.hibernate.naming-strategy = org.hibernate.cfg.ImprovedNamingStrategy 

spring.jpa.properties.hibernate.dialect = org.hibernate.dialect.MySQL5Dialect 

也许它可能是一些涉及到Hibernate的空间配置? (看起来我很奇怪,因为我知道它直接包含在Hibernate 5中,它不再是一个需要添加和配置的外部项目)。

Finnally这是我的pom.xml文件包含所有使用的库:

<?xml version="1.0" encoding="UTF-8"?> 
<project xmlns="http://maven.apache.org/POM/4.0.0" 
     xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
     xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> 
    <modelVersion>4.0.0</modelVersion> 

    <groupId>BeTriviusController</groupId> 
    <artifactId>BeTriviusController</artifactId> 
    <version>1.0-SNAPSHOT</version> 

    <properties> 
     <springboot.version>1.4.1.RELEASE</springboot.version> 
    </properties> 
     <parent> 
      <groupId>org.springframework.boot</groupId> 
      <artifactId>spring-boot-starter-parent</artifactId> 
      <version>1.4.1.RELEASE</version> 
     </parent> 

     <dependencies> 
     <dependency> 
      <groupId>org.springframework.boot</groupId> 
      <artifactId>spring-boot-starter-web</artifactId> 
     </dependency> 

     <dependency> 
      <groupId>org.springframework.boot</groupId> 
      <artifactId>spring-boot-starter</artifactId> 
     </dependency> 

     <dependency> 
      <groupId>org.springframework.boot</groupId> 
      <artifactId>spring-boot-starter-test</artifactId> 
      <scope>test</scope> 
     </dependency> 

     <dependency> 
      <groupId>org.springframework.boot</groupId> 
      <artifactId>spring-boot-starter-actuator</artifactId> 
     </dependency> 

     <!--dependency> 
      <groupId>org.springframework.boot</groupId> 
      <artifactId>spring-boot-starter-security</artifactId> 
     </dependency--> 

     <dependency> 
      <groupId>org.springframework.boot</groupId> 
      <artifactId>spring-boot-starter-data-jpa</artifactId> 
     </dependency> 

     <dependency> 
      <groupId>org.hsqldb</groupId> 
      <artifactId>hsqldb</artifactId> 
      <scope>runtime</scope> 
     </dependency> 

     <dependency> 
      <groupId>mysql</groupId> 
      <artifactId>mysql-connector-java</artifactId> 
     </dependency> 


     <dependency> 
      <groupId>org.springframework.boot</groupId> 
      <artifactId>spring-boot-starter-test</artifactId> 
      <scope>test</scope> 
     </dependency> 
      <dependency> 
       <groupId>org.springframework.boot</groupId> 
       <artifactId>spring-boot-test</artifactId> 
      </dependency> 
      <dependency> 
       <groupId>org.assertj</groupId> 
       <artifactId>assertj-core</artifactId> 
      </dependency> 
      <dependency> 
       <groupId>junit</groupId> 
       <artifactId>junit</artifactId> 
      </dependency> 
      <dependency> 
       <groupId>org.springframework</groupId> 
       <artifactId>spring-test</artifactId> 
       <version>RELEASE</version> 
      </dependency> 

      <dependency> 
       <groupId>org.hibernate</groupId> 
       <artifactId>hibernate-spatial</artifactId> 
       <version>5.0.1.Final</version> 
       <!--<version>4.0</version>--> 
      </dependency> 

     </dependencies> 

    <build> 
     <plugins> 
      <plugin> 
       <groupId>org.springframework.boot</groupId> 
       <artifactId>spring-boot-maven-plugin</artifactId> 
      </plugin> 
      <plugin> 
       <groupId>org.apache.maven.plugins</groupId> 
       <artifactId>maven-compiler-plugin</artifactId> 
       <configuration> 
        <source>1.8</source> 
        <target>1.8</target> 
       </configuration> 
      </plugin> 
     </plugins> 
    </build> 

</project> 

那么,什么是错的?我错过了什么?我该如何解决这个问题并正确映射我的实体类的Point位置与具有point作为数据类型的geographic_position表字段上的值?

+0

尝试用'@Type(type =“org.hibernate.spatial.GeometryType”)注释'Point'字段''? – Mubin

+0

也不应该hibernate的方言应该是'org.hibernate.spatial.dialect.mysql.MySQLSpatial5InnoDBDialect'? – Mubin

+0

@Mubin现在我试着将这行添加到我的application.propertis文件中,但我仍然获得相同的结果。 Line added: spring.jpa.database-platform = org.hibernate.spatial.dialect.mysql.MySQLSpatial5InnoDBDiale ct – AndreaNobili

回答

0

也许尝试序列化时发生此问题:手机,手机,传真,电子邮件和明星。您应该将@Column注释放在这些字段上。 对于它应该工作地点: @Column(columnDefinition =“几何”) @Type(TYPE =“org.hibernate.spatial.GeometryType”)

+0

不,因为你可以在m原始文章中阅读,删除数据类型为“点”的字段映射效果很好,我可以检索所有信息 – AndreaNobili

+0

好吧,所以请尝试把注释我建议 – yt61

+0

嗯我认为这是“ Hibernate的方式“,而不是”JPA的方式“,我tryied,但现在我得到以下错误信息: ”由:java.lang.ClassNotFoundException:无法加载所请求的类:org.hibernate.spatial.GeometryType“。所以我搜索了“org.hibernate.spatial”。外部库,我发现它里面我没有GeometryType类,但我有一些名为GeolatteGeometryType。可能是这个吗? – AndreaNobili

0

我有完全相同的问题,并能来解决方案。因为,正如你最初指出的那样,mysql函数ST_ASTEXT(column_name)完美地工作,这意味着数据肯定存储正确。

我采取了这种认识,并决定在其上构建解决方案。以下是我的@Entity中的一个片段。

@Entity 
@Table(name = "formEntryData") 
public class FormEntryData { 

    ... 

    @Formula("ST_ASTEXT(data_geo)") 
    private String dataGeo; 

    public Geometry getDataGeo() { 
     try { 
      WKTReader reader = new WKTReader(); 
      return reader.read(dataGeo); 
     } catch (ParseException ex) { 
      return null; 
     } 
    } 
} 

然后,你需要做的是设置你的杰克逊ObjectMapper使得com.vividsolutions.jts.geom.*(即GeometryPoint等)可以被序列化为JSON。

要做到这一点这种依赖关系添加到您的依赖管理器(我用的Maven):

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

然后你只需要使用Spring Boot的配置机制来连线起来。

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

瞧!您现在可以从mysql中读取几何类型并输出可接受的格式GeoJSON!希望有所帮助!

相关问题