[SPRING] 하위 리소스에 HATEOAS 링크를 추가하는 방법
SPRING하위 리소스에 HATEOAS 링크를 추가하는 방법
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());
}
감사 !
스테판
해결법
-
==============================
1.이 질문은 비록 꽤 오래되었지만 유사한 기능을 구현하는 사람들에게 응답할만한 가치가있을 수 있습니다. 기본적으로 AdminResource에 AdminModuleResource에 대한 임베디드 리소스를 만들고 AdminResourceAssembler 내에서 이러한 임베디드 리소스에 대한 링크를 빌드합니다. 아래의 코드는이 답변에 게시 된 내용의 단순화 된 버전입니다.
이 질문은 비록 꽤 오래되었지만 유사한 기능을 구현하는 사람들에게 응답할만한 가치가있을 수 있습니다. 기본적으로 AdminResource에 AdminModuleResource에 대한 임베디드 리소스를 만들고 AdminResourceAssembler 내에서 이러한 임베디드 리소스에 대한 링크를 빌드합니다. 아래의 코드는이 답변에 게시 된 내용의 단순화 된 버전입니다.
그는 adminresource 추가 :
@JsonUnwrapped private Resources<EmbeddedWrapper> embeddeds; // + setters/getters
Admin Resource Assembler에서 다음을 추가하십시오.
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));
from https://stackoverflow.com/questions/25602402/how-to-add-hateoas-links-in-a-sub-resource by cc-by-sa and MIT license
'SPRING' 카테고리의 다른 글
[SPRING] @RequestMapping이 올바르게 매핑되지 않았습니다. (0) | 2019.05.24 |
---|---|
[SPRING] HttpServletRequest에서 XML 가져 오기 및 끝점에 사용 (0) | 2019.05.24 |
[SPRING] 스프링 문제가있는 Ajc 컴파일러 사용하기 AspectJ (0) | 2019.05.24 |
[SPRING] 스프링 부트 로그백 DB 애 퍼더 속성 (0) | 2019.05.24 |
[SPRING] 클래스로드와 관련된 전쟁 배포 오류 (0) | 2019.05.24 |