Spring 获取标记作为json中返回的附加对象,同时按该标记搜索图像

Spring 获取标记作为json中返回的附加对象,同时按该标记搜索图像,spring,hibernate,spring-boot,Spring,Hibernate,Spring Boot,好的,首先,我甚至不知道如何用一句话来描述它,去问谷歌(是的,我做了,我失败了) 我有这个gallery spring boot后端应用程序。 因此,图像类和标记类之间存在着很多关系 以下是这些课程: @Entity @Table(name = "image") @JsonIdentityInfo(generator=ObjectIdGenerators.IntSequenceGenerator.class) public class Image { @Id @GeneratedValue(s

好的,首先,我甚至不知道如何用一句话来描述它,去问谷歌(是的,我做了,我失败了)

我有这个gallery spring boot后端应用程序。 因此,图像类和标记类之间存在着很多关系

以下是这些课程:

@Entity
@Table(name = "image")
@JsonIdentityInfo(generator=ObjectIdGenerators.IntSequenceGenerator.class)
public class Image {

@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Column(name = "image_id")
private int id;

@Column(name = "name")
private String name;

@Column(name = "description")
private String description;



@Column(name = "height")
private int height;

@Column(name = "width")
private int width;

@Column(name = "date")
private Date date;

@ManyToMany(cascade = {
        CascadeType.PERSIST,
        CascadeType.MERGE
})
@JoinTable(
        name="image_tag",
        joinColumns = @JoinColumn(name="image_id"),
        inverseJoinColumns = @JoinColumn(name = "tag_id")
)
private Set<Tag> tags = new HashSet<>();
// getters / setters further
这就是神奇之处,这个对象将位于Json响应中每个图像对象的旁边

         {
         "id": 7,
         "name": "joy",
         "createdDate": "2019-09-03T12:27:49.000+0000",
         "images": [
             2
         ]
         }
我使用Angular作为前端,我无法获取这样的图像,因为我会得到一个错误,因为那里会有标记对象

真的很想弄明白

@GetMapping("/tags/{tagname}")
public List<Image> getImageByTag(@PathVariable("tagname") String tagName){
    return imageService.findByTag(tagName);
}
@GetMapping(“/tags/{tagname}”)
公共列表getImageByTag(@PathVariable(“标记名”)字符串标记名){
返回imageService.findByTag(标记名);
}
这就是服务:

@Override
public List<Image> findByTag(String tag) {
    return imageDao.findByTag(tag);
}
@覆盖
公共列表findByTag(字符串标记){
返回imageDao.findByTag(tag);
}

这更像是一个json序列化问题。如果您像我猜的那样使用jackson,您可以尝试通过以下方式手动控制输出:

public class Image {
    @JsonBackReference
    private Set<Tag> tags = new HashSet<>();
}
公共类映像{
@JsonBackReference
private Set tags=new HashSet();
}

如果您确实需要在某些情况下包含标记,您可能必须实现JSON视图

图像对象中的标记已经消失,但其他标记仍然存在。您是否也可以共享控制器代码?我在代码中找不到任何地方会返回任何标记对象,因为控制器中GET方法的返回类型是List,我看不到Java将标记对象添加到响应体中的任何可能方式。不幸的是,我无法帮助您解决这个问题。啊,好吧,@jsonidentifiyinfo注释中有一些东西,但是如果我删除它,我的json多对多关系将无限循环解决无限循环问题,您可以在映射中使用\@JsonManagedReference和\@JsonBackReference的组合
@GetMapping("/tags/{tagname}")
public List<Image> getImageByTag(@PathVariable("tagname") String tagName){
    return imageService.findByTag(tagName);
}
@Override
public List<Image> findByTag(String tag) {
    return imageDao.findByTag(tag);
}
public class Image {
    @JsonBackReference
    private Set<Tag> tags = new HashSet<>();
}