Java中用于查找的分页
我正试图在一个已经运行的应用程序中实现分页,它的工作原理类似于mongodb,在mongodb中,您可以得到一个带有大量参数的查询,如 搜索条件、限制(需要多少文档)、跳过(跳过这些文档) 等等 响应返回json,我的任务是生成指向查询的上一页和下一页链接,这意味着根据查询生成上一页和下一页 我想出了下面的方法Java中用于查找的分页,java,mongodb,Java,Mongodb,我正试图在一个已经运行的应用程序中实现分页,它的工作原理类似于mongodb,在mongodb中,您可以得到一个带有大量参数的查询,如 搜索条件、限制(需要多少文档)、跳过(跳过这些文档) 等等 响应返回json,我的任务是生成指向查询的上一页和下一页链接,这意味着根据查询生成上一页和下一页 我想出了下面的方法 public Paging generateLink(RequestFilter filter) { int prev_skip; int prev_limit;
public Paging generateLink(RequestFilter filter) {
int prev_skip;
int prev_limit;
String pagePrev = "";
String pageNext = "";
int next_skip;
int next_limit;
String searchCondition = JsonUtils.toSimpleJsonString(filter.getSearch());
String url = "http://isgswmdi1n1.nam.nsroot.net:7014/account-search/rest/api/v1/pmm";
//properties.getProperty("paging.link");
System.out.println(url);
Paging pagingOption = new Paging();
Result result = new Result();
int count = luceneSearchService.searchCount(filter);
try {
if (count > 1) {
if (filter.getSkip() > 0) {
prev_skip = Math.max((filter.getSkip() - 1), 0);
prev_limit = filter.getLimit();
pagePrev = url + "?search=" + searchCondition + "&skip=" + prev_skip + "$limit=" + prev_limit;
} else{
result.setPaging(null);
return null;
}
if (count > (filter.getLimit() + filter.getSkip())) {
next_skip = (filter.getSkip() + filter.getLimit());
next_limit = filter.getLimit();
pageNext = url + "?search=" + searchCondition + "&skip=" + next_skip + "$limit=" + next_limit;
} else{
result.setPaging(null);
return null;
}
pagingOption.setPagePrev(pagePrev);
pagingOption.setPageNext(pageNext);
result.setPaging(pagingOption);
}
return pagingOption;
} catch (NullPointerException n)
{
n.printStackTrace();
return pagingOption;
}
}
调用generateLink方法
return Result.ok(resultRow, generateLink(filter));
结果类中的ok响应方法
public static Result ok(List<ResultRow> resultRows, Paging paging) {
if (paging != null) {
return new Result(resultRows, 200, "Completed", paging);
} else
return new Result(resultRows, 200, "Completed");
}
但是我的测试方法失败了
@Test
public void search_allFilterParamsAreDefined_hp() throws Exception {
// given
Map<String, Serializable> searchConditions = singletonMap("shortName", "GO");
List<String> returnFields = asList("shortname", "gfcid");
String returnFieldsStr = returnFields.stream().collect(joining(","));
RequestFilter filter = RequestFilter.create(searchConditions, returnFieldsStr, 5, 10, true);
int resultSize = 20;
List<ResultRow> searchResult = getSearchResult(resultSize);
when(luceneSearchService.search(filter)).thenReturn(searchResult);
when(luceneSearchService.searchCount(filter)).thenReturn(resultSize);
// do
Result result = searchCoordinator.search(filter);
// verify
assertEquals(searchResult, result.getRows());
assertReturnFields(returnFields, result.getRows());
assertNotNull(result.getPaging());
Map<String, String> nextParams = getQueryParams(result.getPaging().getPageNext());
assertParam(nextParams, "search", toSimpleJsonString(searchConditions));
assertParam(nextParams, "skip", "15");
assertParam(nextParams, "limit", "10");
}
@测试
public void search_allfilterParamsRedefined_hp()引发异常{
//给定
Map searchConditions=singletonMap(“shortName”,“GO”);
List returnFields=asList(“简称”、“gfcid”);
字符串returnFieldsStr=returnFields.stream().collect(连接(“,”);
RequestFilter=RequestFilter.create(searchConditions,returnFieldsStr,5,10,true);
int resultSize=20;
List searchResult=getSearchResult(resultSize);
当(luceneSearchService.search(filter)),然后返回(searchResult);
当(luceneSearchService.searchCount(filter)),然后返回(resultSize);
//做
结果=searchCoordinator.search(过滤器);
//核实
assertEquals(searchResult,result.getRows());
assertReturnFields(returnFields,result.getRows());
assertNotNull(result.getPaging());
Map nextParams=getQueryParams(result.getPaging().getPageNext());
assertParam(nextParams,“搜索”,toSimpleJsonString(搜索条件));
资产参数(下一个图表,“跳过”、“15”);
资产参数(下一个图表,“限额”、“10”);
}
你能提供你得到的异常堆栈跟踪吗?嗨,Lex,我正在运行测试,这是我得到的错误测试:search_onlyneResultPage_nopage(com.citi.ddi.esales.as.rest.facade.SearchCoordinatorTest)没有异常跟踪你能提供你得到的异常堆栈跟踪吗?嗨,莱克斯,我正在运行测试,这是我得到的错误测试:search_onlyneresultpage_nopage(com.citi.ddi.esales.as.rest.facade.searchCoordinatorest)没有异常跟踪
@Test
public void search_allFilterParamsAreDefined_hp() throws Exception {
// given
Map<String, Serializable> searchConditions = singletonMap("shortName", "GO");
List<String> returnFields = asList("shortname", "gfcid");
String returnFieldsStr = returnFields.stream().collect(joining(","));
RequestFilter filter = RequestFilter.create(searchConditions, returnFieldsStr, 5, 10, true);
int resultSize = 20;
List<ResultRow> searchResult = getSearchResult(resultSize);
when(luceneSearchService.search(filter)).thenReturn(searchResult);
when(luceneSearchService.searchCount(filter)).thenReturn(resultSize);
// do
Result result = searchCoordinator.search(filter);
// verify
assertEquals(searchResult, result.getRows());
assertReturnFields(returnFields, result.getRows());
assertNotNull(result.getPaging());
Map<String, String> nextParams = getQueryParams(result.getPaging().getPageNext());
assertParam(nextParams, "search", toSimpleJsonString(searchConditions));
assertParam(nextParams, "skip", "15");
assertParam(nextParams, "limit", "10");
}