Spring Data REST不包括资源中的实体链接

由Oliver Gierke解决方案解决

看起来这是Spring 4.2.0中的已知错误,升级到4.2.1提供了预期的function


原始问题

我正在努力将我的开发团队转移到Spring + WebMVC + Data-REST + Data-JPA + Spring HATEOAS for web applications。 我目前的应用程序只是维护我们正在进行的应用程序列表。

我遇到了我的默认Spring Data REST设置问题。 我的资源不包括其特定视图中的链接资源,而它们包含在集合视图中。

我不确定这是否是预期的行为,所以我将在本文末尾包括相关的配置等。

jv.local是我的开发框,apps-list / app是spring-data-rest绑定的地方(下面包含配置)

例:

 curl jv.local:8080/apps-list/app/departments 

返回:

 { "_links" : { "self" : { "href" : "http://jv.local:8080/apps-list/app/departments{?page,size,sort}", "templated" : true } }, "_embedded" : { "departments" : [ { "name" : "Dining", "_links" : { "self" : { "href" : "http://jv.local:8080/apps-list/app/departments/1", "templated" : false }, "institution" : { "href" : "http://jv.local:8080/apps-list/app/departments/1/institution", "templated" : false } } }, { "name" : "Housing", "_links" : { "self" : { "href" : "http://jv.local:8080/apps-list/app/departments/2", "templated" : false }, "institution" : { "href" : "http://jv.local:8080/apps-list/app/departments/2/institution", "templated" : false } } } ] } } 

(特别注意部门在_links中将其机构正确链接)

但是,拉动特定部门会导致

 curl jv.local:8080/apps-list/app/departments/1 { "name" : "Dining", "_links" : { "self" : { "href" : "http://jv.local:8080/apps-list/app/departments/1", "templated" : false } } } 

这个部门没有列出相关机构。 有没有办法在_links中启用该机构?

实体定义

Department.java

 @Entity @Table(name="department") public class Department { @Id @GeneratedValue(strategy = GenerationType.AUTO) private Long id; @Column(name="name") private String name; @ManyToOne(optional = false) @JoinColumn(name="institution", referencedColumnName="id") @RestResource private Institution institution; public Long getId() { return this.id; } public void setId(Long id) { this.id = id; } . . . more getters/setters like above } 

Institution.java

 @Entity @Table(name = "institution") public class Institution { @Id @GeneratedValue(strategy = GenerationType.AUTO) private Long id; @Column(name = "name", unique = true) private String name; public Long getId() { return this.id; } public void setId(Long id) { this.id = id; } . . . name getter/setter } 

DepartmentRepository.java

 @RestResource(rel="departments",path="departments") public interface DepartmentRepository extends JpaRepository { } 

InstitutionRepository.java

 @RestResource(rel="institutions",path="institutions") public interface InstitutionRepository extends JpaRepository { Institution findFirstByName(String name); } 

CONFIGS

通过@Imports从根AppConfig类中包含配置。 AppConfig通过AbstractAnnotationConfigDispatcherServletInitializer子类指定为getRootConfigClasses()的成员。

AppConfig类使用以下注释

 @Configuration @ComponentScan({my.packages, my.other.packages}) @EnableSpringDataWebSupport @EnableTransactionManagement @EnableJpaRepositories(my.repository.location) @EnableWebMvc @EnableWebSecurity @EnableGlobalMethodSecurity(prePostEnabled = true) @Import({PersistenceConfiguration.class, RestConfiguration.class, MvcConfiguration.class, SecurityConfiguration.class}) 

RestConfiguration.java

 @Configuration public class RestConfiguration extends RepositoryRestMvcConfiguration { @Override public RepositoryRestConfiguration config() { RepositoryRestConfiguration config = super.config(); config.setBasePath("/app"); return config; } } 

版本信息

  • spring-webmvc,4.2.0
  • spring-context,4.2.0
  • spring-orm,4.2.0
  • spring-data-jpa 1.8.2
  • jackson核心2.6.1
  • jackson-databind 2.6.1
  • servlet 3.1.0
  • spring-data-rest-webmvc 2.3.2
  • spring-hateoas 0.18.0

请! 让我知道我是否可以提供更多有用的信息,或者可能是一个有效的GH项目。 如果这是预期的行为,有没有办法覆盖,并强制显示链接?

谢谢你的时间!

这是一个众所周知的 – 幸运的是已修复 – 在Spring 4.2中的错误 。 升级到Spring 4.2.1应该修复它(或Spring Boot 1.3 M5)。