我有一个名为AdminResource的父资源和一个名为AdminModuleResource的子资源。
父母的资源被正确地安装了HATEOAS链接:
{
"firstname" : "Stephane",
"lastname" : "Eybert",
"email" : "mittiprovence@yahoo.se",
"password" : "e41de4c55873f9c000f4cdaac6efd3aa",
"passwordSalt" : "7bc7bf5f94fef7c7106afe5c3a40a2",
"links" : [ {
"rel" : "self",
"href" : "http://localhost/admins/3683"
}, {
"rel" : "modules",
"href" : "http://localhost/admins/3683/modules"
} ],
"id" : 3683
}儿童的资源也正确地安装了HATEOAS链接:
{
"module" : "BTS",
"adminResource" : {
"firstname" : "Stephane",
"lastname" : "Eybert",
"email" : "mittiprovence@yahoo.se",
"password" : "e41de4c55873f9c000f4cdaac6efd3aa",
"passwordSalt" : "7bc7bf5f94fef7c7106afe5c3a40a2",
"links" : [ ],
"id" : 3683
},
"links" : [ {
"rel" : "self",
"href" : "http://localhost/modules"
} ],
"id" : 1087
}但是它的父资源已经失去了它的链接。
现在,在我的子管理模块资源中,父管理资源没有它的链接。实际上,汇编程序的toResource方法只提供子管理模块资源的链接。
public AdminModuleResource toResource(AdminModule adminModule) {
AdminModuleResource adminModuleResource = new AdminModuleResource();
adminModuleResource.fromAdminModule(adminModule);
adminModuleResource.add(linkTo(AdminModuleController.class).slash(adminModuleResource.getId()).withSelfRel());
return adminModuleResource;
}
public AdminResource toResource(Admin admin) {
AdminResource adminResource = createResourceWithId(admin.getId(), admin);
adminResource.fromAdmin(admin);
adminResource.add(linkTo(AdminController.class).slash(admin.getId()).slash(UriMappingConstants.MODULES).withRel(UriMappingConstants.MODULES));
return adminResource;
}知道如何将链接添加到父管理资源,即使在子管理模块资源中也是如此?
编辑:下面是我如何构建资源:
public void fromAdminModule(AdminModule adminModule) {
this.setResourceId(adminModule.getId());
this.setModule(adminModule.getModule());
AdminResource adminResource = new AdminResource();
adminResource.fromAdmin(adminModule.getAdmin());
this.adminResource = adminResource;
}
public void fromAdmin(Admin admin) {
this.setResourceId(admin.getId());
this.setFirstname(admin.getFirstname());
this.setLastname(admin.getLastname());
this.setEmail(admin.getEmail().toString());
this.setPassword(admin.getPassword());
}谢谢!
斯蒂芬尼
发布于 2016-02-18 20:15:44
只是偶然发现了这个问题,尽管它已经很老了,但对于其他实现类似功能的人来说,这可能是值得回答的。基本上,您可以在您的AdminModuleResource AdminResourceAssembler. AdminResource上为AdminResource创建嵌入式资源,并在您的AdminResourceAssembler.中构建这些嵌入式资源的链接。下面的代码是发布在此answer上的代码的简化版本
在AdminResource上添加:
@JsonUnwrapped
private Resources<EmbeddedWrapper> embeddeds;
// + setters/getters在AdminResourceAssembler上添加:
EmbeddedWrappers wrapper = new EmbeddedWrappers(true);
List<EmbeddedWrapper> wrappers = (List<EmbeddedWrapper>) super.buildEmbeddables(entity);
Set<AdminModuleResource> moduleResources = adminResource.getModuleResources( );
if(!moduleResources.isEmpty( ))
wrappers.add(wrapper.wrap(adminModuleResourceAssembler.toResources(moduleResources)));
adminResource.setEmbeddeds(new Resources<>(wrappers));https://stackoverflow.com/questions/25602402
复制相似问题