首页 > 解决方案 > 如何在 Spring JSON 查询中不发送 @IdClass 对象

问题描述

我正在设置服务器以使用 JPA 从 postgresql 数据库中获取 CRUD api。每次我想从数据库中公开一个对象时,它都会复制 idObject。

当我使用springframework从数据库中获取一个对象并在之后发送它时,它会像这样复制idObject:

{
    "siteId": 3,
    "contractId": "1",
    "name": "sitenumber1",
    "siteIdObject": {
        "siteId": 3,
        "contractId": "1"
    }
}

SiteId 和 contractId 正在重复......但我想要这样的东西:

{
    "siteId": 3,
    "contractId": "1",
    "name": "sitenumber1"
}

我想避免使用 DTO,因为我认为有更好的方法,但我没有找到。由于我只使用了一两个月的 springFramework 我可能会忘记一些东西......

有代码:

网站代码:

@Entity 
@IdClass(SiteId.class)
@Table(name = "site", schema="public")
public class Site {

    @Id
    @Column(name="siteid")
    private Integer siteId;

    @Id
    @Column(name="clientid")
    private Integer contractId;

    private String name;

    @JsonIgnore
    @OneToMany(cascade=CascadeType.ALL, mappedBy = "site")
    public Set<Device> devices;

//setter, getter, hash, equals, tostring, constructor empty one and full one

站点 ID 代码:

public class SiteId implements Serializable {

    private Integer siteId; 
    private Integer contractId;

// setter, getter, constructor empty and full, hash and equals

感谢帮助:) Bessaix Daniel

标签: springspring-boot

解决方案


如果您使用的是 Spring,您可能还会使用 Jackson,因此如果您使用@JsonIgnoreTypeSiteId注释您的类,则在序列化对象时根本不应该对其进行序列化。Site

但是,由于 id 对象不再序列化,我不确定这是否会破坏您的应用程序逻辑。


推荐阅读