ResourceSupport Bean のように拡張する BeanResource Bean を 1 つ作成できます。
@JsonIgnoreProperties({ "id" })
public class BeanResource extends ResourceSupport {
@JsonUnwrapped
private Object resorce;
public Resource(Object resorce) {
this.resorce = resorce;
}
public Object getResorce() {
return resorce;
}
}
BeanResource Bean がユーザー Bean のように json をレンダリングするようにリソース インスタンス プロパティをアンラップするだけで、ResourceSupport Bean はリンク json オブジェクトをレンダリングします。
その後、このようなアセンブラを作成できます。
public class UserAssembler extends ResourceAssemblerSupport<User, BeanResource> {
public UserAssembler() {
super(User.class, BeanResource.class);
}
@Override
public Resource toResource(User user) {
Resource userResource = new Resource(user);
try {
Link selfLink = linkTo(
methodOn(UserController.class).getUser(user.getId()))
.withSelfRel();
userResource.add(selfLink);
} catch (EntityDoseNotExistException e) {
e.printStackTrace();
}
return userResource;
}
}
コントローラでは、次のようなユーザー Bean を含むリソース Bean をアタッチするだけです
@RequestMapping(value = "/user/{userId}", method = RequestMethod.GET)
public ResponseEntity<Resource> getUser(@PathVariable String userId)
throws EntityDoseNotExistException {
User user = userService.getUser(userId);
Resource userResource = userAssembler.toResource(user);
return new ResponseEntity<Resource>(userResource, HttpStatus.OK);
}