Primavera HATEOAS:Como anunciar serviços de recursos?
-
20-12-2019 - |
Pergunta
Eu tenho o Spring HATEOAS trabalhando para acessar um recurso específico, como
http://localhost:8080/user/1
Mas também quero poder anunciar um URL de serviço:
http://localhost:8080/user
Por exemplo, se você fizer um GET / , quero retornar os recursos de serviço que anuncio.No momento, o único é /auth.
@RequestMapping(value = "/", method = RequestMethod.GET)
@ResponseBody
public HttpEntity<AuthenticationResource> post() {
AuthenticationResource resource = new AuthenticationResource();
resource.add(linkTo(methodOn(AuthenticationController.class).authenticate()).withSelfRel());
return new ResponseEntity<AuthenticationResource>(resource, HttpStatus.OK);
}
@RequestMapping(value = "/auth", method = RequestMethod.POST, consumes = "application/json")
@ResponseBody
public void authenticate() {
//users.save(user);
}
Atualmente isso não está compilando porque linkTo não aceita um argumento void, que presumo ser o tipo de retorno do meu método de autenticação
O que eu QUERO é isso:
{"links":[{"rel":"someString","href":"http://localhost/auth"}]}
Como posso conseguir isso mantendo as práticas recomendadas do HATEOAS?
Solução
Esse.
@RequestMapping(value = "/", method = RequestMethod.GET)
@ResponseBody
public HttpEntity<ResourceSupport> post() {
ResourceSupport resource = new ResourceSupport();
resource.add(linkTo(methodOn(AuthenticationController.class).authenticate()).withRel("authenticate"));
return new ResponseEntity<ResourceSupport>(resource, HttpStatus.OK);
}
@RequestMapping(value = "/auth", method = RequestMethod.POST, consumes = "application/json")
@ResponseBody
public HttpEntity<AuthenticationResource> authenticate() {
AuthenticationResourceAssembler assembler = new AuthenticationResourceAssembler();
AuthenticationResource resource = assembler.toResource(new Authentication());
return new ResponseEntity<AuthenticationResource>(resource, HttpStatus.OK);
}
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow