Spring Data REST не включает ссылки на сущности в ресурсе
Похоже, это была известная ошибка в Spring 4.2.0, обновление до 4.2.1 обеспечило ожидаемую функциональность
Оригинальный вопросЯ работаю над переводом моей команды разработчиков на Spring + WebMVC + Data-REST + Data-JPA + Spring HATEOAS для веб-приложений. Мое текущее приложение просто будет вести список наших текущих приложений.
У меня проблема с настройкой Spring Data REST по умолчанию.Мои ресурсы не включают их связанный ресурс в их определенные представления, в то время как они включены в представление коллекции.
Я не уверен, является ли это предполагаемым поведением или нет, поэтому я включу соответствующие конфиги и тому подобное в конце этого поста.
jv.local
мой блок разработчика, список приложений / 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<Department, Long> {
}
InstitutionRepository.java
@RestResource(rel="institutions",path="institutions")
public interface InstitutionRepository extends JpaRepository<Institution, Long> {
Institution findFirstByName(String name);
}
ConfigsКонфиги включены из корневого класса AppConfig через @Imports. 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весенний контекст, 4.2.0Spring-Orm, 4.2.0spring-data-jpa 1.8.2Джексон-ядро 2.6.1Jackson-Databind 2.6.1сервлет 3.1.0spring-data-rest-webmvc 2.3.2весна-хатеоас 0.18.0Пожалуйста! дайте мне знать, могу ли я предоставить более полезную информацию или, возможно, работающий проект GH. Если это предполагаемое поведение, есть ли способ переопределить и принудительно отобразить ссылки?
Спасибо за ваше время!