【问题标题】:Ignore fields from specific request in Spring-boot在 Spring-boot 中忽略特定请求中的字段
【发布时间】:2018-08-03 21:34:53
【问题描述】:

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

【问题讨论】:

  • 你应该只包装响应。如果需要,请将列表包含在包装器中,如果不需要,则将其排除:)
  • 我是 Spring Boot 新手,是否有任何资源可以实现这一目标?谢谢@DaisyDay

标签: java spring rest spring-boot


【解决方案1】:

多种选择:

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

  2. 创建一个扩展标题的新对象,并在该新对象中再次放置字段 @JsonIgnore 私人名单标题媒体; 这应该按照您的意愿忽略它。您可以使用 lambda 来遍历列表,通过在返回之前对其进行强制转换来构建子类的列表。

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

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

【讨论】:

    猜你喜欢
    • 2019-07-22
    • 1970-01-01
    • 2019-11-05
    • 2019-07-12
    • 2021-06-22
    • 2021-08-18
    • 2015-11-04
    • 2017-06-17
    • 2015-12-18
    相关资源
    最近更新 更多