我使用的是spring-boot-starter-parent 1.4.1.RELEASE。
如果我使用exposeIdsFor返回id,但我需要为每个类
配置它e.g
RepositoryRestConfiguration.exposeIdsFor(User.class); RepositoryRestConfiguration.exposeIdsFor(Address.class);
如果没有配置每个实体类,是否有更简单的配置。
参考:https://jira.spring.io/browse/DATAREST-366
如果我使用Projection,它将返回关联的对象,但我需要为每个类配置
e.g
@Entity
public class Person {
@Id @GeneratedValue
private Long id;
private String firstName, lastName;
@ManyToOne
private Address address;
…
}
PersonRepository:
interface PersonRepository extends CrudRepository<Person, Long> {}
PersonRepository返回
{
"firstName" : "Frodo",
"lastName" : "Baggins",
"_links" : {
"self" : {
"href" : "http://localhost:8080/persons/1"
},
"address" : {
"href" : "http://localhost:8080/persons/1/address"
}
}
}
我的预测:
@Projection(name = "inlineAddress", types = { Person.class })
interface InlineAddress {
String getFirstName();
String getLastName();
Address getAddress();
}
添加投影后,返回..
{
"firstName" : "Frodo",
"lastName" : "Baggins",
"address" : {
"street": "Bag End",
"state": "The Shire",
"country": "Middle Earth"
},
"_links" : {
"self" : {
"href" : "http://localhost:8080/persons/1"
},
"address" : {
"href" : "http://localhost:8080/persons/1/address"
}
}
}
如果其他一些类具有关联作为地址,那么我还需要为这些类添加投影。
但我不想为每个课程配置。如何实现动态投影?这样我的所有实体都将返回嵌套对象作为响应。
答案 0 :(得分:1)
关于您已回答here的第一个问题,exposeIdsFor接受任意数量的参数。另外,正如提到in this thread如果您的所有实体类都位于同一个包中,您可以使用Reflections library获取类的列表并将其提供给exposeIdsFor()。
答案 1 :(得分:-2)
您不应该将域模型作为响应返回。再添加一层DTO(数据传输对象),并在事务中将域模型转换为dto。