Как создать ссылку REST, указывающую на / profile / {user-id} / URI задания, используя Spring EntityLinks? - PullRequest
0 голосов
/ 09 мая 2019

У меня есть метод контроллера, который отвечает за возвращение некоторых данных вместе с полезными ссылками для клиентского приложения.

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

Но оба из нихreturn

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

Что я здесь не так делаю?Или EntityLinks не предназначен для использования таким образом?

Ответы [ 2 ]

0 голосов
/ 16 мая 2019

Я нашел правильный API для использования. Вот одно из возможных решений.

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

Примечание: я не хочу использовать методы контроллера.

0 голосов
/ 13 мая 2019

Вместо предоставления ссылок на один ресурс (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

...