DATAREST-31 - Improved link rendering for search resources.

If the search resource is capable of paging we now augment the link with pagination template variables.
This commit is contained in:
Oliver Gierke
2014-01-23 15:54:37 +01:00
parent 88b2f05edf
commit 61d3d1c0bf
2 changed files with 13 additions and 4 deletions

View File

@@ -62,6 +62,7 @@ class RepositorySearchController extends AbstractRepositoryRestController {
private final EntityLinks entityLinks;
private final ResourceMappings mappings;
private final PagedResourcesAssembler<Object> assembler;
/**
* Creates a new {@link RepositorySearchController} using the given {@link PagedResourcesAssembler},
@@ -83,6 +84,7 @@ class RepositorySearchController extends AbstractRepositoryRestController {
this.entityLinks = entityLinks;
this.mappings = mappings;
this.assembler = assembler;
}
/**
@@ -235,7 +237,13 @@ class RepositorySearchController extends AbstractRepositoryRestController {
String parameterTemplateVariable = getParameterTemplateVariable(mapping.getParameterNames());
String href = builder.slash(mapping.getPath()).toString().concat(parameterTemplateVariable);
links.add(new Link(href, mapping.getRel()));
Link link = new Link(href, mapping.getRel());
if (mapping.isPagingResource()) {
link = assembler.appendPaginationParameterTemplates(link);
}
links.add(link);
}
return new Links(links);

View File

@@ -61,9 +61,10 @@ public class RepositorySearchControllerIntegrationTests extends AbstractControll
ResourceTester tester = ResourceTester.of(resource);
tester.assertNumberOfLinks(4);
tester.assertHasLinkEndingWith("findFirstPersonByFirstName", "findFirstPersonByFirstName{?firstName}");
tester.assertHasLinkEndingWith("firstname", "firstname{?firstName}");
tester.assertHasLinkEndingWith("findByCreatedUsingISO8601Date", "findByCreatedUsingISO8601Date{?date}");
tester.assertHasLinkEndingWith("findByCreatedGreaterThan", "findByCreatedGreaterThan{?date}");
tester.assertHasLinkEndingWith("firstname", "firstname{?firstName,page,size,sort}");
tester.assertHasLinkEndingWith("findByCreatedUsingISO8601Date",
"findByCreatedUsingISO8601Date{?date,page,size,sort}");
tester.assertHasLinkEndingWith("findByCreatedGreaterThan", "findByCreatedGreaterThan{?date,page,size,sort}");
}
@Test(expected = ResourceNotFoundException.class)