Я пытаюсь добавить ссылки HATEOAS на ресурс JSON, обслуживаемый контроллером Spring REST.Определение ассемблера ресурсов для контроллера REST Spring HATEOAS
Я вижу, я должен использовать ассемблер ресурс, как описано в https://github.com/spring-projects/spring-hateoas
Пример показывает класс Person и класс PersonResource.
Я понимаю, класс PersonResource определяется как:
public class PersonResource extends ResourceSupport {
}
Что то класс Person? Является ли это классом домена данных?
В моем случае, я определил класс администратора, который является классом домена REST, и я определил его как имеющая поддержку ресурсов:
public class Admin extends ResourceSupport {
private String firstname;
private String lastname;
private String email;
private String login;
private String password;
private String passwordSalt;
public Admin() {
}
public String getFirstname() {
return this.firstname;
}
public void setFirstname(String firstname) {
this.firstname = firstname;
}
public String getLastname() {
return this.lastname;
}
public void setLastname(String lastname) {
this.lastname = lastname;
}
public String getEmail() {
return email;
}
public void setEmail(String email) {
this.email = email;
}
public String getLogin() {
return this.login;
}
public void setLogin(String login) {
this.login = login;
}
public String getPassword() {
return this.password;
}
public void setPassword(String password) {
this.password = password;
}
public String getPasswordSalt() {
return passwordSalt;
}
public void setPasswordSalt(String passwordSalt) {
this.passwordSalt = passwordSalt;
}
public EventAdmin toEventAdmin() {
EventAdmin eventAdmin = new EventAdmin();
BeanUtils.copyProperties(this, eventAdmin);
return eventAdmin;
}
public static Admin fromEventAdmin(EventAdmin eventAdmin) {
Admin admin = new Admin();
BeanUtils.copyProperties(eventAdmin, admin);
return admin;
}
}
Моего контроллер REST видит только этот администратор класса, так как это REST класс домена. Он не знает и не должен знать ни о каком классе домена данных.
Так что мне интересно, как использовать поддержку ассемблера ресурсов здесь.
Я не понимаю, почему у меня должен быть класс админ домена дополнительной информации.
Уважение,
После ответа Майка вот как мой контроллер теперь выглядит следующим образом:
@RequestMapping(method = RequestMethod.POST, produces = "application/json; charset=utf-8")
@ResponseBody
public ResponseEntity<Admin> add(@RequestBody Admin admin, UriComponentsBuilder builder) {
AdminCreatedEvent adminCreatedEvent = adminService.add(new CreateAdminEvent(admin.toEventAdmin()));
HttpHeaders responseHeaders = new HttpHeaders();
responseHeaders.add("Content-Type", "application/json; charset=utf-8");
responseHeaders.setLocation(builder.path("/admin/{id}").buildAndExpand(adminCreatedEvent.getAdminId()).toUri());
Admin createdAdmin = adminResourceAssembler.toResource(adminCreatedEvent.getEventAdmin());
ResponseEntity<Admin> responseEntity = new ResponseEntity<Admin>(createdAdmin, responseHeaders, HttpStatus.CREATED);
return responseEntity;
}
До, вместо того, чтобы использовать ассемблер ресурса я делал:
Admin createdAdmin = Admin.fromEventAdmin(adminCreatedEvent.getEventAdmin());
createdAdmin.add(linkTo(methodOn(AdminController.class).add(createdAdmin, builder)).withSelfRel());
Но он не дал мне идентификатор ресурса в URL-адресе.
Факт в том, что я также пытаюсь отделить домен данных от домена REST с использованием событий, действующих как порты связи с основным бизнес-приложением. Интересно, не слишком ли это. Во всяком случае, он отлично работал со следующим в моем контроллере: Admin createdAdmin = adminResourceAssembler.toResource (adminCreatedEvent.getEventAdmin()); – Stephane
Теперь я задаюсь вопросом, как иметь ссылки на дополнительный ресурс. Пока что внутри моего основного ресурса ресурс администратора не имеет своих ссылок, поскольку метод toResource ассемблера предоставил только ссылки для основного ресурса ребенка. – Stephane
Spring Data REST делает это и [PersistentEntityResourceAssembler] (https://github.com/spring-projects/spring-data-rest/blob/aa28aebca5cf9e14ac52128f0cd8b0a71672c9f7/spring-data-rest-webmvc/src/main/java/org/ springframework/data/rest/webmvc/PersistentEntityResourceAssembler.java) может быть хорошим местом, чтобы начать выяснять, как эта часть работает. –