У меня проблема с использованием различных контроллеров Spring.Мы используем стандартный Spring PagingAndSortingRepository
с пометкой RepositoryRestResource
для обслуживания поисковых запросов.Один из методов -
Page<Custodian> findByShortNameContainingIgnoreCase(@Param("shortName") String shortName, Pageable p);
. Возвращает все сущности Custodian
, которые удовлетворяют условиям, сгруппированным в страницах.
Результат выглядит следующим образом:
{
"_embedded" : {
"custodians" : [ {
"shortName" : "fr-custodian",
"name" : "french custodian",
"contact" : "Francoir",
"_links" : {
"self" : {
"href" : "http://127.0.0.1:9000/api/custodians/10004"
},
"custodian" : {
"href" : "http://127.0.0.1:9000/api/custodians/10004"
}
}
} ]
},
"_links" : {
"self" : {
"href" : "http://127.0.0.1:9000/api/custodians/search/findByShortNameContainingIgnoreCase?shortName=fr&page=0&size=3&sort=shortName,asc"
}
},
"page" : {
"size" : 3,
"totalElements" : 1,
"totalPages" : 1,
"number" : 0
}
}
Это формат, который ожидает наш веб-интерфейс.
Однако нам нужен еще один запрос, который приводит к довольно длинной функции (и, следовательно, URL), потому что он требуетнесколько параметров.Чтобы быть конкретным, он ищет строку в Custodian
.Таким образом, каждый параметр имеет одно и то же значение.
Чтобы сократить URL-адрес, мы создали RepositoryRestController
с аннотацией ResponseBody
и реализовали функцию, которая принимает только один параметр, внутренне вызывает длинный URL-адрес и возвращает результат заново.результат (a Page
).
@RequestMapping(value = "/custodian", method = RequestMethod.GET)
public Page<Custodian> search(@RequestParam(value = "keyWord") String keyWord, Pageable p) {
return repo.LONGURL(keyWord, keyWord, p);
}
К сожалению, Spring не применяет тот же формат к результату нашей функции.
Это выглядит так:
{
"content" : [ {
"id" : 10004,
"shortName" : "fr-custodian",
"name" : "french custodian",
"contact" : "Francoir",
} ],
"pageable" : {
"sort" : {
"sorted" : true,
"unsorted" : false
},
"offset" : 0,
"pageSize" : 3,
"pageNumber" : 0,
"unpaged" : false,
"paged" : true
},
"totalElements" : 3,
"totalPages" : 1,
"last" : true,
"size" : 3,
"number" : 0,
"sort" : {
"sorted" : true,
"unsorted" : false
},
"numberOfElements" : 3,
"first" : true
}
Как вы получаете Spring для доставки того же формата в нашем пользовательском методе?