Использование @RepositoryRestResource генерирует пути и внедряет все необходимые ссылки HATEOAS для REST API, но когда я возвращаю те же результаты из репозитория с использованием контроллера, структура JSON отличается и ссылок HATEOAS нет.
Как бы я мог вернуть ту же структуру JSON из контроллера, что и пути, сгенерированные RepositoryRestResource?
// /accounts (RepositoryRestResource JSON structure)
{
_embedded: {
accounts: []
},
_links: {
first: {},
self: {},
next: {},
last: {},
profile: {},
search: {}
},
page: {
size: 20,
totalElements: 35,
totalPages: 2,
number: 0
}
}
// /my-accounts (RestController JSON structure)
{
content: [ ... ], // accounts
pageable: {},
totalPages: 1,
totalElements: 2,
last: true,
size: 20,
number: 0,
sort: {},
numberOfElements: 2,
first: true
}
REST репозиторий:
@RepositoryRestResource(collectionResourceRel = "accounts", path = "accounts", itemResourceRel = "account")
public interface AccountRepository extends PagingAndSortingRepository<Account, Long> {
@RestResource(path = "owner", rel = "owner")
Page<Account> findByOwner(@Param("username") String owner,Pageable p);
}
Контроллер REST:
@RestController
public class AccountController {
private AccountRepository repo;
@Autowired
public AccountController(AccountRepository repo) {
this.repo = repo;
}
@RequestMapping(
path = "/my-accounts",
method = RequestMethod.GET,
produces = "application/hal+json")
public ResponseEntity<Page<Account>> getStatus(
@RequestParam(value = "page", defaultValue = "0", required = false) int page,
@RequestParam(value = "size", defaultValue = "20", required = false) int size,
Authentication authentication) {
String username = authentication.getName();
Page<Account> accounts = repo.findByOwner(username, PageRequest.of(page, size));
return ResponseEntity.ok(accounts);
}
}