복붙노트

[SPRING] Spring : ManyToOne 엔티티를 가져올 때 참조 엔티티 (OneToMany)가 JSON에 표시되지 않습니다.

SPRING

Spring : ManyToOne 엔티티를 가져올 때 참조 엔티티 (OneToMany)가 JSON에 표시되지 않습니다.

모든 하위 엔티티 (Town)를 가져 오기 위해 POSTMAN에서 GET 요청을 보내면 부모 엔티티 (Province)가 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입니다.

내 엔티티에 문제가 있습니까? 아니면 다른 것이 있습니까?

해결법

  1. ==============================

    1.@JsonBackReference와 @JsonManagedReference를 교체하십시오. 원래:

    @JsonBackReference와 @JsonManagedReference를 교체하십시오. 원래:

    @JsonManagedReference
    private Province province;
    
    @JsonBackReference
    private List<Town> towns;
    
  2. from https://stackoverflow.com/questions/39642650/spring-when-getting-a-manytoone-entity-reference-entity-onetomany-is-not-sho by cc-by-sa and MIT license