Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/spring/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何从字符串手动创建可分页对象_Java_Spring - Fatal编程技术网

Java 如何从字符串手动创建可分页对象

Java 如何从字符串手动创建可分页对象,java,spring,Java,Spring,我没有发现是否可以从字符串手动创建pageable,假设我们有以下服务方法 public <T> List<T> findAnything(final int page, final int size, final String sort) { // e.g. id,desc&username,asc final Pageable pageable = new PageRequest(page, size, null); return null;

我没有发现是否可以从字符串手动创建pageable,假设我们有以下服务方法

public <T> List<T> findAnything(final int page, final int size, final String sort) { // e.g. id,desc&username,asc

    final Pageable pageable = new PageRequest(page, size, null);
    return null;
}
public List findAnything(最终整型页面、最终整型大小、最终字符串排序){//例如id、desc和username、asc
final Pageable Pageable=新页面请求(页面、大小、空);
返回null;
}
我的问题是如何实例化的对象

org.springframework.data.domain.Sort

根据给定的字符串格式,需要注意的是,这些参数是动态更改的,因此我更可能需要到spring解析器的路径,在我的示例中,我传递null而不是对象

id、描述和用户名、asc

编辑

更详细一点,我正在寻找spring如何将作为查询参数到达rest端点的“sort”字符串(带有其余默认参数)转换为可分页对象的机制。您可以执行以下操作:

private Sort orderBy() {
    return new Sort(Sort.Direction.DESC, "ID")
                .and(new Sort(Sort.Direction.ASC, "username"));
}
我认为这很有帮助

排序类具有静态嵌套类顺序:

public static class Order{
    private final Direction direction;
    private final String property;
    private final boolean ignoreCase;
    private final NullHandling nullHandling;
}
然后您可以使用:

public static Sort by(List<Order> orders)
公共静态排序依据(列表顺序)

通过字符串创建订单,就像简单的拆分一样。

为此,我写了一些类似于spring的东西,如果spring公开SortHandlerMethodArgumentResolver.parseParameterIntoSort以供包外使用,我会很高兴,但到目前为止还没有

private Sort parseMultipleSortQueries(final String query) {

    final String[] queries = query.split("&");
    return parseSortQuery(queries, ",");
}

private Sort parseSortQuery(final String[] query, String delimiter) {

    final List<Sort.Order> orders = new ArrayList<>();
    for (String q : query) {

        if (q == null) {
            continue;
        }

        final String[] parts = q.split(delimiter);
        final Sort.Direction direction = parts.length == 0 ? null : Sort.Direction.fromStringOrNull(parts[parts.length - 1]);
        for (int i = 0; i < parts.length; i++) {

            if (i == parts.length - 1 && direction != null) {
                continue;
            }

            final String property = parts[i];
            if (!StringUtils.hasText(property)) {
                continue;
            }
            orders.add(new Sort.Order(direction, property));
        }
    }
    return orders.isEmpty() ? null : new Sort(orders);
}

从方法签名中可以看出,这些参数是动态变化的,所以这实际上不是我想要的。这个答案实际上为您提供了所需的一切。您确实知道如何将
字符串
参数传递给方法。然后,将其传递到
orderBy
方法中。似乎您不太了解这个问题。您可以将字符串转换为Map,然后从Map排序元素Map填充,其中id将是列名和值order@MykhailoMoskura现在,它更有意义了。考虑到格式
id、desc、username、asc
不规则,构建
列表是一个不错的选择。实际上,
SortHandlerMethodArgumentResolver
就是这样做的。向上投票。给定的格式是什么意思
id,desc,username,asc
您可能是指
sort=id,desc&sort=username,asc
?这是Spring识别
排序
对象的方式。在我的例子中,这些参数是id、desc和username、asc字符串,更新了格式,很抱歉混淆了
@Test
public void testParseQuery() {
    System.out.println(parseMultipleSortQueries("firstName,asc&lastName,desc")); //firstName: ASC,lastName: DESC
}