/** * The projection interface using XPath and JSON Path expression to selectively pick elements from the payload. * * @author Oliver Gierke */ @ProjectedPayload public interface UserPayload { @XBRead("//firstname") @JsonPath("$..firstname") String getFirstname(); @XBRead("//lastname") @JsonPath("$..lastname") String getLastname(); } }
@Override public void addArgumentResolvers(List<HandlerMethodArgumentResolver> argumentResolvers) { PageableHandlerMethodArgumentResolver pageResolver = new PageableHandlerMethodArgumentResolver(); pageResolver.setFallbackPageable(PageRequest.of(0, 10)); argumentResolvers.add(pageResolver); }
@XBRead("//lastname") @JsonPath("$..lastname") String getLastname(); }
/** * Equis the model with a {@link Page} of {@link User}s. Spring Data automatically populates the {@link Pageable} from * request data according to the setup of {@link PageableHandlerMethodArgumentResolver}. Note how the defaults can be * tweaked by using {@link PageableDefault}. * * @param pageable will never be {@literal null}. * @return */ @ModelAttribute("users") public Page<User> users(@PageableDefault(size = 5) Pageable pageable) { return userManagement.findAll(pageable); }
protected Resources<?> entitiesToResources(Page<Object> page, PersistentEntityResourceAssembler assembler, Class<?> domainType, Optional<Link> baseLink) { if (page.getContent().isEmpty()) { return baseLink.<PagedResources<?>> map(it -> pagedResourcesAssembler.toEmptyResource(page, domainType, it))// .orElseGet(() -> pagedResourcesAssembler.toEmptyResource(page, domainType)); } return baseLink.map(it -> pagedResourcesAssembler.toResource(page, assembler, it))// .orElseGet(() -> pagedResourcesAssembler.toResource(page, assembler)); }
@Override public Object resolveArgument(MethodParameter parameter, ModelAndViewContainer mavContainer, NativeWebRequest webRequest, WebDataBinderFactory binderFactory) throws Exception { Pageable pageable = resolver.resolveArgument(parameter, mavContainer, webRequest, binderFactory); return new DefaultedPageable(pageable, resolver.isFallbackPageable(pageable)); }
@Bean @Override public HateoasPageableHandlerMethodArgumentResolver pageableResolver() { HateoasPageableHandlerMethodArgumentResolver resolver = super.pageableResolver(); resolver.setPageParameterName(repositoryRestConfiguration().getPageParamName()); resolver.setSizeParameterName(repositoryRestConfiguration().getLimitParamName()); resolver.setFallbackPageable(PageRequest.of(0, repositoryRestConfiguration().getDefaultPageSize())); resolver.setMaxPageSize(repositoryRestConfiguration().getMaxPageSize()); return resolver; }
@Bean @Override public HateoasSortHandlerMethodArgumentResolver sortResolver() { HateoasSortHandlerMethodArgumentResolver resolver = super.sortResolver(); resolver.setSortParameter(repositoryRestConfiguration().getSortParamName()); return resolver; }
@Override public TemplateVariables getSortTemplateVariables(MethodParameter parameter, UriComponents template) { return sortResolver.getSortTemplateVariables(parameter, template); }
@Override public Sort resolveArgument(MethodParameter methodParameter, ModelAndViewContainer mavContainer, NativeWebRequest webRequest, WebDataBinderFactory binderFactory) { Sort sort = delegate.resolveArgument(methodParameter, mavContainer, webRequest, binderFactory); return sort.isUnsorted() ? sort : translator.translateSort(sort, methodParameter, webRequest); } }
/** * Creates a new {@link ProjectingMessageConverter} using the given {@link ObjectMapper}. * @param mapper must not be {@literal null}. */ public ProjectingMessageConverter(ObjectMapper mapper) { Assert.notNull(mapper, "ObjectMapper must not be null"); JacksonMappingProvider provider = new JacksonMappingProvider(mapper); MethodInterceptorFactory interceptorFactory = new JsonProjectingMethodInterceptorFactory(provider); SpelAwareProxyProjectionFactory factory = new SpelAwareProxyProjectionFactory(); factory.registerMethodInvokerFactory(interceptorFactory); this.projectionFactory = factory; this.delegate = new StringJsonMessageConverter(mapper); }
@Override public TemplateVariables getPaginationTemplateVariables(MethodParameter parameter, UriComponents components) { return pagingResolver.getPaginationTemplateVariables(parameter, components); }
@Override public boolean supportsParameter(MethodParameter parameter) { return delegate.supportsParameter(parameter); }
@Override public boolean supportsParameter(MethodParameter parameter) { return delegate.supportsParameter(parameter); }
@Override public Pageable resolveArgument(MethodParameter methodParameter, ModelAndViewContainer mavContainer, NativeWebRequest webRequest, WebDataBinderFactory binderFactory) { Pageable pageable = delegate.resolveArgument(methodParameter, mavContainer, webRequest, binderFactory); if (pageable == null || pageable.getSort() == null) { return pageable; } Sort translated = translator.translateSort(pageable.getSort(), methodParameter, webRequest); return PageRequest.of(pageable.getPageNumber(), pageable.getPageSize(), translated); } }
@RequestMapping(value = "/", method = RequestMethod.GET) String index(Model model, // @QuerydslPredicate(root = User.class) Predicate predicate, // @PageableDefault(sort = { "lastname", "firstname" }) Pageable pageable, // @RequestParam MultiValueMap<String, String> parameters) { ServletUriComponentsBuilder builder = ServletUriComponentsBuilder.fromCurrentRequest(); builder.replaceQueryParam("page", new Object[0]); model.addAttribute("baseUri", builder.build().toUri()); model.addAttribute("users", repository.findAll(predicate, pageable)); return "index"; } }
@Override public Object resolveArgument(MethodParameter parameter, ModelAndViewContainer mavContainer, NativeWebRequest webRequest, WebDataBinderFactory binderFactory) throws Exception { Pageable pageable = delegate.resolveArgument(parameter, mavContainer, webRequest, binderFactory); if (pageable == null || pageable.getSort() == null) { return new DefaultedPageable(pageable, delegate.isFallbackPageable(pageable)); } Sort translated = translator.translateSort(pageable.getSort(), parameter, webRequest); pageable = PageRequest.of(pageable.getPageNumber(), pageable.getPageSize(), translated); return new DefaultedPageable(pageable, delegate.isFallbackPageable(pageable)); } }
@XBRead("//firstname") @JsonPath("$..firstname") String getFirstname();
@JsonPath("$.user.name") String getName();