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?

Foi útil?

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
scroll top