如何使用 Spring EntityLinks 创建指向 /profiles/{user-id}/job URI 的 REST link?
How to create a REST link pointing to /profiles/{user-id}/job URI using Spring EntityLinks?
我有一个控制器方法,负责 return 一些数据以及客户端应用程序的有用链接。
@GetMapping(value = "/{uniqueId}")
@ResponseStatus(value = HttpStatus.OK)
public HttpEntity<UserProfileMinimalDto> getUserMinimal(@PathVariable String uniqueId) {
UserProfileMinimalDto userDto = userProfileService.getProfileMinimal(uniqueId);
userDto.add(
entityLinks.linkToSingleResource(UserProfileController.class, uniqueId),
linkTo(methodOn(UserJobController.class).getUserJobs(uniqueId)).withRel(REL_EXPERIENCES)
);
另一个控制器
@RestController
@RequestMapping(PROFILES)
@ExposesResourceFor(UserJob.class)
public class UserJobController {
@PostMapping(value = "/{uniqueId}"+"/job" )
@ResponseStatus(value = HttpStatus.CREATED)
public HttpEntity<UserJob> getUserJobs(@PathVariable String uniqueId) {
System.out.println("user jobs");
return new ResponseEntity<UserJob>(new UserJob(), HttpStatus.OK);
}
}
这个 return 我的链接:
"_links": {
"self": {
"href": "http://localhost:8085/api/v1/profiles/theCoder"
},
"experiences": {
"href": "http://localhost:8085/api/v1/profiles/theCoder/job"
}
}
但我想使用 EntityLinks
获得相同的结果。可以看出,我已将 UserJobController
公开为 UserJob
资源,以便我可以将其与 EntityLinks
一起使用
所以我尝试了以下方法,但其中 none 有效。
entityLinks.linkFor(UserJob.class, uniqueId).withRel(REL_EXPERIENCES),
entityLinks.linkFor(UserJob.class, uniqueId, "/job").withRel(REL_EXPERIENCES)
但是他们两个return
"experiences": {
"href": "http://localhost:8085/api/v1/profiles"
}
我在这里做错了什么?或者 EntityLinks
不应该这样使用?
与其向单个资源 (linkToSingleResource
) 提供 link,不如尝试 link 到特定方法:
Link link = linkTo(methodOn(UserJobController.class).getUserJobs("theCoder")).withSelfRel();
我找到了可以使用的 API。这是一种可能的解决方案。
entityLinks.linkFor(UserJob.class, uniqueId).slash("/job").withRel(REL_EXPERIENCES)
注意:我不想使用控制器方法。
我有一个控制器方法,负责 return 一些数据以及客户端应用程序的有用链接。
@GetMapping(value = "/{uniqueId}")
@ResponseStatus(value = HttpStatus.OK)
public HttpEntity<UserProfileMinimalDto> getUserMinimal(@PathVariable String uniqueId) {
UserProfileMinimalDto userDto = userProfileService.getProfileMinimal(uniqueId);
userDto.add(
entityLinks.linkToSingleResource(UserProfileController.class, uniqueId),
linkTo(methodOn(UserJobController.class).getUserJobs(uniqueId)).withRel(REL_EXPERIENCES)
);
另一个控制器
@RestController
@RequestMapping(PROFILES)
@ExposesResourceFor(UserJob.class)
public class UserJobController {
@PostMapping(value = "/{uniqueId}"+"/job" )
@ResponseStatus(value = HttpStatus.CREATED)
public HttpEntity<UserJob> getUserJobs(@PathVariable String uniqueId) {
System.out.println("user jobs");
return new ResponseEntity<UserJob>(new UserJob(), HttpStatus.OK);
}
}
这个 return 我的链接:
"_links": {
"self": {
"href": "http://localhost:8085/api/v1/profiles/theCoder"
},
"experiences": {
"href": "http://localhost:8085/api/v1/profiles/theCoder/job"
}
}
但我想使用 EntityLinks
获得相同的结果。可以看出,我已将 UserJobController
公开为 UserJob
资源,以便我可以将其与 EntityLinks
一起使用
所以我尝试了以下方法,但其中 none 有效。
entityLinks.linkFor(UserJob.class, uniqueId).withRel(REL_EXPERIENCES),
entityLinks.linkFor(UserJob.class, uniqueId, "/job").withRel(REL_EXPERIENCES)
但是他们两个return
"experiences": {
"href": "http://localhost:8085/api/v1/profiles"
}
我在这里做错了什么?或者 EntityLinks
不应该这样使用?
与其向单个资源 (linkToSingleResource
) 提供 link,不如尝试 link 到特定方法:
Link link = linkTo(methodOn(UserJobController.class).getUserJobs("theCoder")).withSelfRel();
我找到了可以使用的 API。这是一种可能的解决方案。
entityLinks.linkFor(UserJob.class, uniqueId).slash("/job").withRel(REL_EXPERIENCES)
注意:我不想使用控制器方法。