You can create one BeanResource bean which extends ResourceSupport bean like.
@JsonIgnoreProperties({ "id" })
public class BeanResource extends ResourceSupport {
@JsonUnwrapped
private Object resorce;
public Resource(Object resorce) {
this.resorce = resorce;
}
public Object getResorce() {
return resorce;
}
}
just Unwrap resource instance property so that BeanResource bean will render json like user bean along with ResourceSupport bean will render link json object,
after that you can create assembler like this.
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;
}
}
and in controller just attach Resource bean which contains user bean like
@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);
}