【问题标题】:Avoid unwanted fields of joining class spring boot避免加入类spring boot的不需要的字段
【发布时间】:2017-07-20 00:38:03
【问题描述】:

我是 Spring Boot 及其实现的新手

遇到问题:我必须model classes songs , movies

movieid 属于歌曲类的位置,我将这张表加入了电影

在控制器中如何实现排除movie的所有字段,除了movieidtitle

我的控制器类是

@RestController
@RequestMapping("api")
public class SongsController {

@Autowired
SongsRepository songsRepository;

    @RequestMapping(value = "/Songs", method = RequestMethod.GET)
    public ResponseEntity<List<Songs>> getSongsList(){


        return new ResponseEntity<>(songsRepository.findAll(), HttpStatus.OK);}

songs class has (id , movieid, songtitile.....)
movie class has (movieid, moviename, ..........................)

有人实现了这个库https://github.com/monitorjbl/json-view

@Entity
public class Songs {

    @Id
    @GeneratedValue(strategy = GenerationType.AUTO)
    private Long    id;
    private String songTitle;
    @ManyToOne
    @JoinColumn(name = "movieId")
    private MoviesInfo moviesInfo;
    private int year;
    private List<String> singers;
    private List<String> lyricists;
    private float length;
....}}



@Entity
public class Movies {


    @Id
    @GeneratedValue(strategy = GenerationType.AUTO)
    private Long movieId;
    private String title;
    private String year;
    private String director;
    private String genre;
...}}

【问题讨论】:

  • 如果您可以分享SongsMoviespojo 以查看关系,这可能会有所帮助。
  • 假设您想排除其他可以包含的参数 @JsonIgnorejson-view 中所述
  • 如果我提到@JsonIgnore 会影响我的电影服务。我尝试在歌曲 pojo 中提到忽略注释并包含 json-view 中提到的函数我没有按预期得到输出

标签: java spring spring-boot postgresql-9.1


【解决方案1】:

您可能应该使用弹簧投影。它旨在完全按照您的要求进行。

看看projections docs

【讨论】:

  • 我尝试了投影,但在这种情况下我无法生成预期的 json。
  • 为什么不呢?你能提供更多关于你尝试了什么以及你到底想要什么结构的详细信息吗?
  • 在我的歌曲实体中,我只想显示电影实体的三个字段movieid、name、title。我是否需要编写单独的投影类 songProject 再次提及所有字段。
  • 是的。定义一个接口(不是一个类)并为您需要的字段提供 getter。然后,您可以在存储库类中使用它。文档里说的很清楚
  • 我在电影类和歌曲类中有年份字段。如何在界面中编写该字段
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2020-05-09
  • 1970-01-01
  • 1970-01-01
  • 2020-10-25
  • 1970-01-01
  • 2017-06-23
  • 2018-12-20
相关资源
最近更新 更多