首页 > 解决方案 > spring boot 动态忽略字段 jpa

问题描述

我正在使用 Spring Boot REST Web 服务和 Angular 5 作为前端,我有一个用于休眠的模型类,如下所示:

@Entity
public class Title {
        private Integer id;
        private String name;
        private Date releaseDate;
        private Time runtime;
        private String storyline;
        private String picture;
        private String rated;
        private String type;
        private Double rating;
        private Integer numberOfVotes;
        private Timestamp inserted;
        private Set<Genre> genres = new HashSet<>();
        private List<TitleCelebrity> titleCelebrities;
        private List<TitleMedia> titleMedia;

        // Basic getters and setter

        @ManyToMany(cascade = { CascadeType.PERSIST, CascadeType.MERGE })
        @JoinTable(name = "title_genre", joinColumns = { @JoinColumn(name = "title_id") }, inverseJoinColumns = { @JoinColumn(name = "genre_id") })
        public Set<Genre> getGenres() {
            return genres;
        }

        public void setGenres(Set<Genre> genres) {
            this.genres = genres;
        }

        @OneToMany(mappedBy = "title", cascade = CascadeType.ALL)
        public List<TitleCelebrity> getTitleCelebrities() {
            return titleCelebrities;
        }

        public void setTitleCelebrities(List<TitleCelebrity> titleCelebrities) {
            this.titleCelebrities = titleCelebrities;
        }

        @OneToMany(mappedBy = "title", cascade = CascadeType.ALL)
        public List<TitleMedia> getTitleMedia() {
            return titleMedia;
        }

        public void setTitleMedia(List<TitleMedia> titleMedia) {
            this.titleMedia = titleMedia;
        }
    }

这是我的 REST 控制器

@RestController
@RequestMapping("titles")
@CrossOrigin(origins = {"http://localhost:4200"})
public class TitleController {

    private TitleService titleService;

    @Autowired
    public void setTitleService(TitleService titleService) {
        this.titleService = titleService;
    }

    // Api to get all the movies ordered by release date
    @GetMapping("movies")
    public List<Title> getAllMoviesOrderByReleaseDateDesc() {
        return this.titleService.findByTypeOrderByReleaseDateDesc("movie");
    }

    @GetMapping("movies/{id}")
    public Title findById(@PathVariable Integer id) {
        return this.titleService.findById(id);
    }

}

我想要的是当我向第一种方法“/movies”发出请求时,我不想要 Telemedia 的集合,但如果我向第二种方法“/movies/id”发出请求,我想要 Telemedia 的集合。当然,@JsonIgnore无论请求是什么,注释都会忽略集合。

标签: springspring-bootjpaspring-data-jpaspring-data

解决方案


在这种情况下,创建两个模型可能会更好;一个代表第一个响应,另一个代表第二个响应。

null您还可以在发送回之前将集合设置为您的第二个请求。

您无法@JsonIgnore单独完成此操作,因为您无法在注释中执行条件逻辑。


推荐阅读