About commons-jax-rs-data
How to use
The server side, read Pageable
parameters as @BeanParam
:
import javax.ws.rs.BeanParam; import javax.ws.rs.GET; import org.oxerr.commons.ws.rs.data.OffsetPageRequest import org.springframework.data.domain.Page; import org.springframework.data.domain.Sort; @Path("/posts") @Produces(MediaType.APPLICATION_JSON) public class PostResource { @GET public Page<Post> getPosts(@BeanParam OffsetPageRequest pageable) { // The page size, same as limit. int pageSize = pageable.getPageSize(); // Zero-based offset. long offset = pageable.getOffset(); // Zero-based page number. int pageNumber = pageable.getPageNumber(); Sort sort = pageable.getSort(); } }
and the client side could pass the parameters as follows:
curl 'http://localhost:8080/posts?limit=10&offset=0&sort%5B%5D=field1,asc&sort%5B%5D=field2,desc'
How to use in Spring @RestController
import org.springframework.data.domain.Page;; import org.springframework.web.bind.annotation.GetMapping import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestParam; import org.springframework.web.bind.annotation.RestController; @RestController @RequestMapping("/posts") public PostController { @GetMapping public Page<Post> getPosts(@RequestParam(value = "q", required = false) String q, SpaceDelimitedOffsetPageRequest pageable) { // ... } }
and the client side could pass the parameters as follows:
curl 'http://localhost:8080/posts?limit=10&offset=0&sort=field1%20asc&sort=field2%20desc'
How to change the default behavior
Extends and override the relevant methods to change the default behavior, for example:
import javax.ws.rs.QueryParam; import org.oxerr.commons.ws.rs.data.OffsetPageRequest; public class SpaceDelimitedOffsetPageRequest extends OffsetPageRequest { /** * Change the soring paramter name. */ @Override @QueryParam("sort") public void setSort(List<String> sorts) { super.setSort(sorts); } /** * Change the delimiter in the sort string between the property and the sort direction. */ @Override protected String getPropertyDelimiter() { return " "; } @Override protected int getMaxLimit() { return 1000; } // ... }