【问题标题】:JSON not showing how it should in PostmanJSON没有在邮递员中显示它应该如何
【发布时间】:2019-12-01 16:17:42
【问题描述】:

当我尝试调用 REST 端点时,我的 Postman 出现了一些奇怪的行为。 有一个永无止境的循环。我在 stackoverflow 上找到了一个解决方案,@JsonIgnore 注释将删除这个奇怪的循环(我在下面的 Book 实体中有它)但是当我尝试在 Postman 中列出所有书籍时,我看不到这些书籍的作者。有没有更好的解决方案来显示作者的书籍(删除 @JsonIgnore 注释)但也删除那个奇怪的循环?

Book.java

@Entity
public class Book {

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

    @ManyToMany
    @JsonIgnore // removed wierd loop with data
    @JoinTable(name = "author_book", joinColumns = @JoinColumn(name = "book_id"),
            inverseJoinColumns = @JoinColumn(name = "author_id"))
    private Set<Author> authors = new HashSet<>();

    public Book() {
    }

Author.java

@Entity
public class Author {

    @Id
    @GeneratedValue(strategy = GenerationType.AUTO)
    private Long id;
    private String forename;
    private String surname;

    @ManyToMany(mappedBy = "authors")
    private Set<Book> books = new HashSet<>();

    public Author() {
    }

BookController.java

@RestController
public class BookController {
    private BookService bookService;

    @Autowired
    public BookController(BookService bookService) {
        this.bookService = bookService;
    }

    // expose /books and get list of all books - GET
    @GetMapping("/api/books")
    public List<Book> getAllBooks() {
        return bookService.getAllBooks();
    }

AuthorController 与 BookController 相同。

这就是 Book JSON 在 Postman 中的样子(这些书没有作者):

Postman 中的 Authors 一切正常:

这是我从 Book 实体中删除 @JsonIgnore 时的循环:

【问题讨论】:

    标签: java json spring-boot postman


    【解决方案1】:

    使用@JsonIgnoreProperties注解可以忽略一个字段上的子字段,那么这个注解会忽略二级字段。

    Book 
        - >  authors
                    -> books  // this field is ignored
    
    Author 
        - >  books
                    -> authors // this field is ignored
    
    @ManyToMany
    @JsonIgnoreProperties("books")
    @JoinTable(name = "author_book", joinColumns = @JoinColumn(name = "book_id"),
            inverseJoinColumns = @JoinColumn(name = "author_id"))
    private Set<Author> authors = new HashSet<>();
    
    @ManyToMany(mappedBy = "authors")
    @JsonIgnoreProperties("authors")
    private Set<Book> books = new HashSet<>();
    

    【讨论】:

      猜你喜欢
      • 2021-09-25
      • 2021-11-09
      • 1970-01-01
      • 2019-12-07
      • 2021-12-05
      • 2020-11-22
      • 2023-03-23
      • 2017-03-02
      • 2018-10-28
      相关资源
      最近更新 更多