看起来这是Spring 4.2.0中的已知错误,升级到4.2.1提供了预期的功能
我正致力于将我的开发团队转移到Spring + WebMVC + Data-REST + Data-JPA + Spring HATEOAS for web applications。我目前的应用程序只是维护我们正在进行的应用程序列表。
我遇到了我的默认Spring Data REST设置问题。 我的资源并未在其特定视图中包含其关联资源,而它们包含在集合视图中。
我不确定这是否属于预期的行为,所以我会在本文末尾附上相关的配置等。
curl jv.local:8080/apps-list/app/departments
是我的开发盒,
apps-list / app是spring-data-rest绑定的地方(下面包含配置)
示例:
{
"_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
}
}
} ]
}
}
返回:
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中将其机构正确链接)
但是,拉出特定部门会导致
@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
}
此处部门没有列出相关机构。有没有办法在_links中启用该机构?
Department.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
}
Institution.java
@RestResource(rel="departments",path="departments")
public interface DepartmentRepository extends JpaRepository<Department, Long> {
}
DepartmentRepository.java
@RestResource(rel="institutions",path="institutions")
public interface InstitutionRepository extends JpaRepository<Institution, Long> {
Institution findFirstByName(String name);
}
InstitutionRepository.java
AbstractAnnotationConfigDispatcherServletInitializer
通过@Imports从根AppConfig类中包含配置。 AppConfig通过getRootConfigClasses()
子类指定为@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})
。
AppConfig类使用以下
进行注释@Configuration
public class RestConfiguration extends RepositoryRestMvcConfiguration {
@Override
public RepositoryRestConfiguration config() {
RepositoryRestConfiguration config = super.config();
config.setBasePath("/app");
return config;
}
}
RestConfiguration.java
{{1}}
请!让我知道我是否可以提供更多有用的信息,或者可能是一个有效的GH项目。如果这是预期的行为,有没有办法覆盖,并强制显示链接?
谢谢你的时间!
答案 0 :(得分:1)
这是一个众所周知的 - 幸好已经修复了 - bug in Spring 4.2。升级到Spring 4.2.1应该修复它(或Spring Boot 1.3 M5)。