0

次のような特定のリソースにアクセスするためにSpring HATEOASが機能しています

http://localhost:8080/user/1

しかし、サービスの URL をアドバタイズできるようにしたい:

http://localhost:8080/user

たとえば、GET / を実行すると、アドバタイズしたサービス リソースが返されます。現在、唯一のものは /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);
}

linkTo は void 引数を取らないため、現在これはコンパイルされていません。これは、認証メソッドの戻り値の型であると推測されます。

私が欲しいのはこれです:

{"links":[{"rel":"someString","href":"http://localhost/auth"}]}

HATEOAS のベスト プラクティスの範囲内でこれを達成するにはどうすればよいですか?

4

1 に答える 1

1

これ。

@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);
}
于 2014-01-08T20:31:00.650 に答える