Spring 获取标记作为json中返回的附加对象,同时按该标记搜索图像
好的,首先,我甚至不知道如何用一句话来描述它,去问谷歌(是的,我做了,我失败了) 我有这个gallery spring boot后端应用程序。 因此,图像类和标记类之间存在着很多关系 以下是这些课程: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
@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<>();
}