如何使用Spring EntityLinks创建一个指向/profiles/{user-id}/job URI的REST



我有一个控制器方法,它负责返回一些数据以及客户端应用程序的有用链接。

@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);
}
}

这让我返回链接:

"_links": {
"self": {
"href": "http://localhost:8085/api/v1/profiles/theCoder"
},
"experiences": {
"href": "http://localhost:8085/api/v1/profiles/theCoder/job"
}
}

但我想使用EntityLinks实现相同的结果。正如人们所看到的,我已经将UserJobController公开为UserJob资源,以便我可以将其与EntityLinks一起使用 所以我尝试了以下方法,但没有一个有效。

entityLinks.linkFor(UserJob.class, uniqueId).withRel(REL_EXPERIENCES),
entityLinks.linkFor(UserJob.class, uniqueId, "/job").withRel(REL_EXPERIENCES)

但他们都回来了

"experiences": {
"href": "http://localhost:8085/api/v1/profiles"
}

我在这里做错了什么?或者EntityLinks不应该这样使用?

我找到了要使用的正确API。这是一种可能的解决方案。

entityLinks.linkFor(UserJob.class, uniqueId).slash("/job").withRel(REL_EXPERIENCES)

注意:我不想使用控制器方法。

不要提供指向单个资源的链接(linkToSingleResource),而是尝试链接到特定方法:

Link link = linkTo(methodOn(UserJobController.class).getUserJobs("theCoder")).withSelfRel();

https://docs.spring.io/spring-hateoas/docs/current/reference/html/#fundamentals.obtaining-links.builder.methods

相关内容

  • 没有找到相关文章

最新更新