Spring Boot and Spring Data Rest



我想在我的Spring Boot项目中使用Spring Data Rest,但我遇到了困难。 我正在使用 Spring 引导版本 2.0.0.M2。我也尝试了版本 1.5.4.RELEASE,但遇到了同样的错误

我在我的pom中使用以下导入

<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-jpa</artifactId>
<exclusions>
<exclusion>
<groupId>org.apache.tomcat</groupId>
<artifactId>tomcat-jdbc</artifactId>
</exclusion>
</exclusions>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-rest</artifactId>
</dependency>

我的数据库对象如下

@Entity
@Table(name = "T_PUBLICATION")
public class PublicationDBO implements Serializable{
private static final long serialVersionUID = -8883649751668748295L;
@Id
@Column(name = "id")
private Long id;    
@Column(name = "publication_name")
private String publicationName; 
@Column(name = "number_of_pages")
private Long numberOfPages; 
@Column(name = "storage_key")
private String storageKey;  
@Column(name = "processing_complete")
private Boolean processingComplete; 
@Column(name = "date_added")
private LocalDateTime dateAdded;    
@Column(name = "date_updated")
private LocalDateTime dateUpdated;
}

数据库 SQL (MySQL DB(

CREATE TABLE `T_PUBLICATION` (
`id` int(11) NOT NULL,
`publication_name` varchar(255) NOT NULL,
`number_of_pages` int(11) NOT NULL,
`storage_key` varchar(255) NOT NULL,
`processing_complete` tinyint(1) NOT NULL,
`date_added` datetime NOT NULL,
`date_updated` datetime NOT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

存储库类

import org.springframework.data.repository.PagingAndSortingRepository;
import org.springframework.data.rest.core.annotation.RepositoryRestResource;
import com.dao.vo.PublicationDBO;
@RepositoryRestResource(collectionResourceRel = "publication", path = "publication")
public interface PublicationRepository extends PagingAndSortingRepository<PublicationDBO, Long>{
}

当我尝试访问 Spring 数据和此对象的端点时 - 我收到以下错误

2017-07-17 16:03:28 [http-nio-8080-exec-1] DEBUG org.hibernate.SQL - select publicatio0_.id as id1_1_0_, publicatio0_.date_added as date_add2_1_0_, publicatio0_.date_updated as date_upd3_1_0_, publicatio0_.number_of_pages as number_o4_1_0_, publicatio0_.processing_complete as processi5_1_0_, publicatio0_.publication_name as publicat6_1_0_, publicatio0_.storage_key as storage_7_1_0_ from T_PUBLICATION publicatio0_ where publicatio0_.id=?
Hibernate: select publicatio0_.id as id1_1_0_, publicatio0_.date_added as date_add2_1_0_, publicatio0_.date_updated as date_upd3_1_0_, publicatio0_.number_of_pages as number_o4_1_0_, publicatio0_.processing_complete as processi5_1_0_, publicatio0_.publication_name as publicat6_1_0_, publicatio0_.storage_key as storage_7_1_0_ from T_PUBLICATION publicatio0_ where publicatio0_.id=?
2017-07-17 16:03:28 [http-nio-8080-exec-1] WARN  o.s.w.s.m.s.DefaultHandlerExceptionResolver - Failed to write HTTP message: org.springframework.http.converter.HttpMessageNotWritableException: Could not write JSON: java.lang.String cannot be cast to java.lang.Long; nested exception is com.fasterxml.jackson.databind.JsonMappingException: java.lang.String cannot be cast to java.lang.Long (through reference chain: org.springframework.data.rest.webmvc.json.PersistentEntityJackson2Module$PersistentEntityResourceSerializer$1["content"]->com.dao.vo.PublicationDBO["publicationName"])
2017-07-17 16:03:28 [http-nio-8080-exec-1] WARN  o.s.w.s.m.s.DefaultHandlerExceptionResolver - Resolved exception caused by Handler execution: org.springframework.http.converter.HttpMessageNotWritableException: Could not write JSON: java.lang.String cannot be cast to java.lang.Long; nested exception is com.fasterxml.jackson.databind.JsonMappingException: java.lang.String cannot be cast to java.lang.Long (through reference chain: org.springframework.data.rest.webmvc.json.PersistentEntityJackson2Module$PersistentEntityResourceSerializer$1["content"]->com.dao.vo.PublicationDBO["publicationName"])

注意:我尝试使用标准服务类进行 JPA 调用,它们第一次工作,因此到数据库表的实体映射是正确的

任何人都可以提供任何帮助来说明为什么会发生这种情况吗? 我已经检查了我的数据库映射,它们似乎没问题

谢谢 戴民

我认为您没有将"id"作为 JSON 的一部分发送。您可能认为 id 是自动创建的,并假设您不必发送。如果是这种情况(即您不想在 JSON 对象中发送 id(,请将@JsonIgnore添加到实体定义中的 id。如果这样做,则在查询时也不会在返回对象中包含 Id 字段。如果需要 id,请在 JSON 中发送 null 或 "(空字符串(。有时,Spring 引导可能会忽略这些空字段。应该还有另一个@Json...注释,指示它不要忽略空值/空值。我无法把它放在我的头顶上,你必须谷歌它。

根据这篇文章 -https://github.com/spring-projects/spring-boot/issues/9756 将 Spring 引导版本从 2.0.0.M1 更改为 2.0.0.BUILD-SNAPSHOT 已解决此问题

最新更新