代码之家  ›  专栏  ›  技术社区  ›  K. Ayoub

忽略Spring boot中特定请求的字段

  •  -1
  • K. Ayoub  · 技术社区  · 6 年前

    我使用SpringBootRestWeb服务和Angular5作为前端,我有一个hibernate的模型类,如下所示:

    @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;
            }
        }
    

    这是我的休息控制器

    @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'发出请求时,我不想要titleMedia的集合,但是如果我向第二个方法'/movies/id'发出请求,我想要titleMedia的集合。
    当然是注释 @JsonIgnore 无论请求是什么,都将忽略集合。

    1 回复  |  直到 6 年前
        1
  •  1
  •   Daisy Day    6 年前

    多种选择:

    1. 在不需要集合的方法中,将列表放入变量中,然后循环遍历该变量,将集合设置为空。

    2. 创建扩展标题的新对象,并在该新对象中再次放置字段 @杰森尼戈尔 私人列表标题媒体; 这应该忽略你想要的。您可以使用lambda在返回子类之前通过强制转换来遍历该列表,从而生成该子类的列表。

    3. 创建一个包含所有字段的新对象,除了不需要的字段,该对象有一个获取Title对象的构造函数,然后费力地从传入Title对象设置所有这些字段。

    您可以在服务层中执行上述操作之一,尽管我的首选选项(子类中的jsonignore)可能应该在web层中执行。