java - 在 Spring-boot 中忽略特定请求中的字段
问题描述
我使用 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
都会忽略集合。
解决方案
各种选项:
在不需要集合的方法中,将列表放入变量中,然后循环遍历它,将集合设置为 null。
创建一个扩展标题的新对象,并在该新对象中再次放置字段@JsonIgnore private List titleMedia; 这应该按照您的意愿忽略它。您可以使用 lambda 来遍历列表,通过在返回之前对其进行转换来构建子类的列表。
创建一个包含所有字段的新对象,除了您不想要的具有一个构造函数,该构造函数采用 Title 对象,然后费力地从传入的 title 对象中设置所有这些字段。
您可以在服务层中执行上述操作之一,尽管我的首选选项(子类中的 jsonignore)可能应该在 Web 层中完成。
推荐阅读
- outlook - MailboxNotEnabledForRESTAPI - Microsoft Graph API 与启用 HMA 的本地服务器集成
- php - 测试 facebook business-sdk 时出错
- open-telemetry - 从隐式上下文中获取当前活动范围
- python - 使用 Django 在多边形中实现点搜索
- javascript - 错误太多重新渲染。react 限制渲染次数以防止无限循环
- python - 错误:需要 Microsoft Visual C++ 14.0 或更高版本
- python - 在 python modulenotfounderror 中:没有名为“json”的模块
- python - Python np.fromfile 给出错误:Errno 2 No such file or directory
- android - 移动视频转码的最佳参数。请指教
- python - 如果不在值范围内,Python Pandas 会替换值