【问题标题】:Spring: When getting a ManyToOne entity, reference entity (OneToMany) is not showing in JSONSpring:获取ManyToOne实体时,JSON中未显示引用实体(OneToMany)
【发布时间】:2017-01-31 05:52:03
【问题描述】:

当我在 POSTMAN 中发送 GET 请求以获取我的所有子实体(城镇)时,JSON 响应中未显示父实体(省)。

这是我的控制器。

@RequestMapping(value ="api/v1/town",method = RequestMethod.GET)
public ResponseEntity<List<Town>> getAllTowns() {
    List<Town> towns = townService.getAllTowns();
    if(towns.isEmpty()) {
        return new ResponseEntity<List<Town>>(HttpStatus.NO_CONTENT);
    }

    return new ResponseEntity<List<Town>>(towns, HttpStatus.OK);
}

这些是我的实体。

父类

@Entity
@Table(name = "PROVINCE")
public class Province {

    @Id
    @GeneratedValue(strategy = GenerationType.AUTO)
    @Column(name = "PROVINCE_ID")
    private long id;

    private String name;

    @OneToMany(fetch = FetchType.LAZY, cascade = CascadeType.ALL, mappedBy = "province", targetEntity = Town.class)
    @JsonManagedReference("Province-Town")
    private List<Town> towns;

    public long getId() {
        return id;
    }

    public void setId(long id) {
        this.id = id;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public List<Town> getTowns() {
        return towns;
    }

    public void setTowns(List<Town> towns) {
        this.towns = towns;
    }
}

儿童班

@Entity
@Table(name = "TOWN")
public class Town {

    @Id
    @GeneratedValue(strategy = GenerationType.AUTO)
    @Column(name = "TOWN_ID")
    private long id;

    private String name;

    @ManyToOne(cascade = CascadeType.MERGE)
    @JoinColumn(name = "PROVINCE_ID")
    @JsonBackReference("Province-Town")
    private Province province;

    private long kilometer;

    public long getId() {
        return id;
    }

    public void setId(long id) {
        this.id = id;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public Province getProvince() {
        return province;
    }

    public void setProvince(Province province) {
        this.province = province;
    }

    public long getKilometer() {
        return kilometer;
    }

    public void setKilometer(long kilometer) {
        this.kilometer = kilometer;
    }
}

我得到的回应是这样的

{
    "id" : 1,  
    "name" : "Some Town",
    "kilometer" : 350
}

我期待的是

{
    "id" : 1,  
    "name" : "Some Town",
    "province" : { 
             //Province data.....
     }
    "kilometer" : 350
}

我能够展示这样的东西,但我使用的对象不是 Spring-data-jpa 实体,只是简单的 POJO。

我的实体有问题吗?或者还有什么别的吗?

【问题讨论】:

    标签: java json spring spring-mvc spring-data-jpa


    【解决方案1】:

    交换@JsonBackReference@JsonManagedReference。基本上:

    @JsonManagedReference
    private Province province;
    
    @JsonBackReference
    private List<Town> towns;
    

    【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-07-06
    • 1970-01-01
    • 2015-03-27
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多