给定给定类的投影,有没有办法告诉Spring包含在投影注释类型中定义的类的所有默认属性?
给定2实体类
@Entity
@Data
public class Client {
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
private long id;
private String nom;
private String adresseLigne1;
private String adresseLigne2;
private String ville;
@ManyToOne
private Province province;
/* Many other attribute */
}
和
@Entity
@Data
public class Province {
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
private long id;
private String name;
}
每个都有一个储存库
@RepositoryRestResource(collectionResourceRel = "Client", path = "Client")
public interface ClientRepository extends PagingAndSortingRepository<Client, Long> {
List<Client> findBy();
}
-
@RepositoryRestResource(collectionResourceRel = "Province", path = "Province")
public interface ProvinceRepository extends PagingAndSortingRepository<Province, Long> {
List<Province> findByName(String name);
}
我为客户端获得以下默认json:
{
"nom" : "Mallowpond High",
"adresseLigne1" : "895 Gonçal Burg",
"adresseLigne2" : "Apt. 450",
"ville" : "Lake Irenehaven",
"_links" : {
"self" : {
"href" : "http://127.0.0.1:8080/api/rest/Client/108"
},
"province" : {
"href" : "http://127.0.0.1:8080/api/rest/Client/108/province"
}
}
}
有没有一种方法可以创建一个投影,该投影将返回客户机的所有属性,而不必为客户机中的所有属性编写所有getXXX方法
@Projection(name = "inlineProvince", types = { Client.class })
public interface ClientProjection {
/* A way to tell the projection to include all of Client attribute */
Province getProvince(); // This is the linked object I want to add to my json output as an in-line map (i.e have the behaviour as if it did not have it's own Repository)
}
这样我可以在调用时在客户端JSON中嵌入省http://127.0.0.1:8080/api/rest/Client/108?projection=inline:
{
"nom" : "Mallowpond High",
"adresseLigne1" : "895 Gonçal Burg",
"adresseLigne2" : "Apt. 450",
"ville" : "Lake Irenehaven",
"_links" : {
"self" : {
"href" : "http://127.0.0.1:8080/api/rest/Client/108"
},
"province" : {
"href" : "http://127.0.0.1:8080/api/rest/Client/108/province"
}
},
"province" : {
"name" : "Quebec"
}
}
我发现我能做到:
@Projection(name = "inline", types = { Client.class })
public interface ClientProjection {
@Value("#{target}")
Client getClient();
Province getProvince(); // This is the linked object I want to add to my json output as an in-line map (i.e have the behaviour as if it did not have it's own Repository)
}
但我两个都有客户
{
"province" : {
"name" : "quebec"
},
"client" : {
"nom" : "Mallowpond High",
"adresseLigne1" : "895 Gonçal Burg",
"adresseLigne2" : "Apt. 450",
"ville" : "Lake Irenehaven",
"_links" : {
"self" : {
"href" : "http://127.0.0.1:8080/api/rest/Client/108"
},
"province" : {
"href" : "http://127.0.0.1:8080/api/rest/Client/108/province"
}
}
}
}
你的@RestRepositoryResources
所产生的内容叫做HAL格式。你所要求的内容偏离了HAL的规范,我建议继续使用标准(原因很明显)。
HAL支持将关系嵌入到资源中。这意味着您将得到一个嵌入的字段,该字段将保存一个包含省的基数1集合。看起来是这样的:
{
"nom" : "Mallowpond High",
"adresseLigne1" : "895 Gonçal Burg",
"adresseLigne2" : "Apt. 450",
"ville" : "Lake Irenehaven",
"_links" : {
"self" : {
"href" : "http://127.0.0.1:8080/api/rest/Client/108"
},
"province" : {
"href" : "http://127.0.0.1:8080/api/rest/Client/108/province"
}
},
"_embedded"{
"provinces" : [{
"name" : "Quebec",
"_links" : {
"self" : {
"href" : "http://127.0.0.1:8080/api/rest/Client/108/province"
}
}
}]
}
}
不幸的是,Spring的@RepositoryRestResource
不容易支持这一点,但仍然相对容易实现。您需要添加一个ResourceAssembler
,并将客户端
转换为支持_embedded
字段的ClientResource
。看看这个问题,你如何做到这一点(我自己也用这个)
我的代码中有以下对象。 如何最好地删除所有“地址”字段?因此,我得出以下结果。我一直在努力寻找这个基本问题的答案。
您好,我正在建立一个动物园微服务,包括动物、员工、客户和价格表。我的动物微服务可以工作,但在我的员工微服务中,我遇到了一个错误,即没有为类型“EmployeeModel”找到属性“name”。在问这个问题之前,我已经在网上搜索了几个小时,还有一些类似的问题。我在模型中没有“名字”employee_name,我只是感到困惑,不知道如何修复它。任何指导/建议/信息将不胜感激:)第一次发布,所以我希望我
问题内容: 我正在将我的某些类从对getter和setter的广泛使用改为对属性的更pythonic的使用。 但是现在我陷入了困境,因为以前的一些getter或setter方法会调用基类的相应方法,然后执行其他操作。但是如何通过属性来实现呢?如何在父类中调用属性getter或setter? 当然,仅调用属性本身即可进行无限递归。 问题答案: 您可能认为您可以调用由属性调用的基类函数: 尽管我认为这
如何使类示例推断类型基于实例值检查: 打字沙盒。
问题内容: 我有下表: 我需要将其映射到对象: 在哪里,StronglyTypedData类似于: 默认情况下,XML列映射到XmlDocument属性,但是我希望XML序列化/反序列化到StronglyTypedData属性发生在映射时。 我需要怎么做才能做到这一点? 问题答案: 您需要编写一个负责转换的。 您可以从XmlDocType开始,它实际上是从原始XML转换为XmlDocument的那