Spring REST возвращает рекурсивный JSON при двунаправленном отображении JPA - PullRequest
0 голосов
/ 11 мая 2019

Я создал двунаправленное отображение JPA «один ко многим» с двумя таблицами.Ленивая выборка добавлена ​​в обе стороны.Когда я призываю получить одну сторону данных, постоянный слой возвращает правильный набор результатов без связей.Но когда эти данные получают через REST API, он возвращает длинный JSON-объект.(Рекурсивные данные).

Java 8, Spring boot, Spring Data JPA


@Entity
@Table(name = "t_auction")
public class Auction {

    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    @Column(name = "id")
    private Long id;

    @Column(name = "auction_name")
    private String tenderName;

    @OneToMany(fetch = FetchType.LAZY,cascade = CascadeType.ALL, mappedBy = "tender")
    private Set<Bid> bids;

}

`` Bidding Entity ---------------

@Entity
@Table(name = "t_bid")
public class Bid {

    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Long id;

    @Column(name = "bid_date")
    private Date bidDate;

    @ManyToOne(fetch = FetchType.LAZY,optional = false)
    @JoinColumn(name = "tender_join_id")
    private Tender tender;
}

`` Service Class ------------

public ResponseDto loadTenders(Tender tender) {
        ResponseDto responseDto = new ResponseDto();
        responseDto.setResponseItems(tenderRepository.findAll()); 
        return responseDto; // returns long JSON
    }

The actual result was a long JSON object.
The expected result is, Only requested entity without any mapped entities.

1 Ответ

1 голос
/ 11 мая 2019

1) Убедитесь, что все ваши сущности реализуют equals и hashCode

2) Если вы запрашиваете от Auction доBid тогда вы можете игнорировать Auction:

@JsonIgnore
@ManyToOne(fetch = FetchType.LAZY,optional = false)
@JoinColumn(name = "tender_join_id")
private Auction auction;

Просто из моего опыта передачи прокси-серверов гибернации непосредственно для анализа Джексоном, просто вызывает много подобных проблем.Вы можете подумать о каком-то DTO со слоем картостроителей.Просто совет, решение за вами.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...