Я строю остальные микросервисы с помощью Spring и Spring Repositories.Я хочу дать клиенту контроль над поиском и сортировкой (используя spring-data-rest).
public PagedResources<TestDto> find(
@PageableDefault(page = 0, size = 50) final Pageable pageable,
final PagedResourcesAssembler<Test> assembler) {
final Page<Test> pagedResults = testRepository.findAll(pageable);
return assembler.toResource(pagedResults, testResourceAssembler);
}
Код выше работает отлично, за исключением того, что я не рад, что сортировка связана с моим даослоем вместоDTO-слой.Пример:
http://localhost:8080/my-service/test?size=100&page=0&sort=statusCode,asc
json response (DTO):
{
"links": [
...
...
],
"content": [
{
"id": 4
"status": "OK"
"links": []
}
],
"page": {
"size": 100,
"totalElements": 1,
"totalPages": 1,
"number": 0
}
}
заметить разницу между сортировкой «statusCode» в URL запроса и соответствующим «состоянием» в ответе dto.С точки зрения клиента это не логично.Теперь я также раскрыл некоторую внутреннюю информацию сервиса.Я не могу изменить реализацию службы, потому что она может использоваться клиентом и сломает старый запрос после изменения имени.
Когда я добавляю пользовательское сопоставление для обработки разницы statuscode и status в поисковом запросе:
private PageRequest getPageRequest(final Pageable pageable) {
final List<Order> newOrder = new ArrayList<>();
for (final Order order : pageable.getSort()) {
if (daoToJpaMapping.containsKey(order.getProperty())) {
newOrder.add(new Order(order.getDirection(), daoToJpaMapping.get(order.getProperty())));
} else {
throw new OngeldigSortProperty(order.getProperty() + " is niet toegestaan als sorteerproperty");
}
}
final PageRequest pageRequest = PageRequest.of(pageable.getPageNumber(), pageable.getPageSize(), Sort.by(newOrder));
return pageRequest;
}
это имеет неприятные последствия для меня с ответом hal, потому что он содержит полный URL, основанный на именах jpa:
{
"links": [
{
"rel": "first",
"href": "http://localhost:8080/my-service/test?page=0&size=100&sort=statusCode,asc",
...
Я не мог найти способ решить эту проблему, кроменастраиваемый параметр сортировки, страницы и размера.Но создание пользовательского атрибута сортировки, который работает так же хорошо, как и в весенней версии, похоже на то, чтобы снова изобрести колесо.Означает ли это, что я пытаюсь злоупотреблять весенними функциями?Работа с DTO довольно распространена, поэтому я был удивлен, что никакой (весенний) учебник, объясняющий подкачку в вашем интерфейсе отдыха, не освещает эту часть.Есть ли решение?