2016-04-27 7 views
0

Я не понимаю, что мне нужно добавить, чтобы моя программа стала HATEOAS. У меня есть счета .java, Сообщение .java, Контроллеры и репозиториев. Из некоторых руководств они добавляют AccountResource и PostResource, где они строят ссылки внутри этих классов. В чем разница между AccountResource и Account? Мне нужны оба? Если да, создайте класс ресурсов для каждого нормального класса? Я попытался это сделать, и это не сработало. Я понятия не имею, что я делаю больше :(. Мне нужна помощь в понимании, как перейти от нормального REST к HATEOAS. Какие классы мне нужно добавить?Внедрение Spring HATEOAS linkbuilding

public class Account { 

//Account ID 
@Id private String userId; 

//General info 
protected String firstName; 
protected String lastName; 
protected String username; 
protected String email; 
protected String password; 
protected String birthDate; 
protected String activities; 
protected String uri; 
private Set<Post> posts = new HashSet<>(); 
List<Account> friends = new ArrayList<Account>(); 

//Getter, constructor... 



@RestController 
public class AccountController {  

@Autowired 
private AccountRepository accountRepository; 

//Create account 
@RequestMapping(value="/accounts", method = RequestMethod.POST) 
public ResponseEntity<?> accountInsert(@RequestBody Account account) { 

    account = new Account(account.getUri(), account.getUsername(), account.getFirstName(), account.getLastName(), account.getEmail(), account.getPassword(), account.getBirthDate(), account.getActivities(), account.getFriends()); 
    accountRepository.save(account); 
    HttpHeaders httpHeaders = new HttpHeaders(); 
    Link forOneAccount = new AccountResource(account).getLink("self"); 
    httpHeaders.setLocation(URI.create(forOneAccount.getHref())); 

    return new ResponseEntity<>(null, httpHeaders, HttpStatus.CREATED); 
} 



public class AccountResource extends ResourceSupport { 

private Account account; 

public AccountResource(Account account) { 
    String username = account.getUsername(); 
    this.account = account; 
    this.add(new Link(account.getUri(), "account-uri")); 
    this.add(linkTo(AccountController.class, username).withRel("accounts")); 
    this.add(linkTo(methodOn(AccountController.class, username).getUniqueAccount(account.getUserId())).withSelfRel()); 
} 

public AccountResource() { 

} 

public Account getAccount() { 
    return account; 
} 
} 

ответ

0

Account, Post и т.д., ваш домен лица, в то время как *Resource являются их представление подвергается вашему API к внешнему миру.

объекты домена может быть, например, JPA Сущность, содержащая все метаданные, необходимыми для их настойчивости и отношений с другими организациями. Даже если они не являются объектами JPA, они являются внутренним представлением, используемым вашей бизнес-логикой приложения.

Ресурсы содержат информацию для сериализации/десериализации JSON и прямых ссылок на другие ресурсы.

Посмотрите на этом образце проекте https://github.com/opencredo/spring-hateoas-sample и в соответствующем блоге: Implementing HAL hypermedia REST API using Spring HATEOAS

Он реализует простое, но не столь тривиальные библиотеки API, с книгой - Автор - доменом издателем.

Смежные вопросы