大佬教程收集整理的这篇文章主要介绍了loadAll() 和 loadById(Long id) 时 JSON 序列化的差异,大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。
我创建了文件夹类(java springboot),它描述了书签管理的多级文件夹结构:
@Entity
@Setter
@Getter
@NoArgsConstructor
@AllArgsConstructor
**public class Folder** implements serializable {
@ID
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long ID;
@manyToOne(cascade = CascadeType.PERSIST)
@Joincolumn(name = "parent_ID")
@JsonIDentityInfo(
generator = ObjectIDGenerators.PropertyGenerator.class,property = "ID")
private Folder parent;
@OnetoMany(mappedBy = "parent",cascade = CascadeType.PERSIST)
private List<Folder> children = new ArrayList<>();
private String name;
private String path;
@OnetoMany(mappedBy = "folder",cascade = CascadeType.PERSIST)
@JsonManagedReference
private List<Bookmark> bookmarkList = new ArrayList<>();
}
@Entity
@Setter
@Getter
@NoArgsConstructor
@AllArgsConstructor
**public class Bookmark** implements serializable {
@ID
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long ID;
private String name;
private String url;
private String description;
/**
* parent folder
*/
@manyToOne
@JsonBACkReference
private Folder folder;
}
我的问题是,当 loadAll() 和 loadByID(Long ID) 时,我可以看到序列化 JsON 的差异:
@service
@transactional
**public class Folderservice** {
private FolderRepo folderRepo;
@autowired
public Folderservice(FolderRepo folderRepo) {
this.folderRepo = folderRepo;
}
public voID save(Folder folder) {
folderRepo.save(folder);
}
public List<Folder> loadAll() {
List<Folder> folderList = folderRepo.findAll();
return folderList;
}
public Folder loadByID(Long ID) {
Folder folder = folderRepo.findByID(ID).get();
return folder;
}
}
@RestController
@requestMapPing("/bookmarks-app")
**public class FolderControllerRest** {
private Folderservice folderservice;
@autowired
public FolderControllerRest(Folderservice folderservicE) {
this.folderservice = folderservice;
}
@GetMapPing("/folders/all")
public List<Folder> getFolderListAll() {
List<Folder> folderList = folderservice.loadAll();
return folderList;
}
@GetMapPing("/folder/{ID}")
public Folder getFolderByID(
@PathVariable(name = "ID") String ID
) {
if (!"undefined".equals(ID)) {
Long folderID = Long.parseLong(ID);
return folderservice.loadByID(folderID);
} else return null;
}
}
也就是说,区别在于。在 folder.ID=2 中。
当我使用AJAX加载所有内容时:
$.AJAX({
url: "/bookmarks-app/folders/all",data: {},method: "GET",dataType: "JsON"
});
父实体序列化为其“ID”编号(如我所愿),
但是当使用AJAX时:
$.AJAX({
url: "/bookmarks-app/folder/2",dataType: "JsON"
})
父实体序列化为对象(如下截图)。
screenshoot
我认为您误用了@JsonIdentityInfo,文档说
@JsonIdentityInfo 允许在序列化期间第二次遇到 POJO 时通过 id 对其进行序列化。
然后在“列表”模式下您获得 id,在单一模式下您获得整个对象。
也许你应该使用 TypeAdaptor 来获取 id
以上是大佬教程为你收集整理的loadAll() 和 loadById(Long id) 时 JSON 序列化的差异全部内容,希望文章能够帮你解决loadAll() 和 loadById(Long id) 时 JSON 序列化的差异所遇到的程序开发问题。
如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。
本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。