yangys
2024-03-30 871c0fce344b24c8046ec01173eca79b9e60c1d7
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
package com.qianwen.core.mp.resolver;
 
import com.baomidou.mybatisplus.core.metadata.OrderItem;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.qianwen.core.tool.utils.ObjectUtil;
import com.qianwen.core.tool.utils.StringUtil;
import org.springframework.core.MethodParameter;
import org.springframework.lang.NonNull;
import org.springframework.web.bind.support.WebDataBinderFactory;
import org.springframework.web.context.request.NativeWebRequest;
import org.springframework.web.method.support.HandlerMethodArgumentResolver;
import org.springframework.web.method.support.ModelAndViewContainer;
 
/* loaded from: blade-starter-mybatis-9.3.0.0-SNAPSHOT.jar:org/springblade/core/mp/resolver/PageArgumentResolver.class */
public class PageArgumentResolver implements HandlerMethodArgumentResolver {
    private static final String ORDER_ASC = "asc";
 
    public boolean supportsParameter(MethodParameter parameter) {
        return Page.class.equals(parameter.getParameterType());
    }
 
    public Object resolveArgument(@NonNull MethodParameter parameter, ModelAndViewContainer mavContainer, NativeWebRequest request, WebDataBinderFactory binderFactory) {
        String pageParam = request.getParameter("page");
        String sizeParam = request.getParameter("size");
        String[] sortParam = request.getParameterValues("sort");
        Page<?> page = new Page<>();
        if (StringUtil.isNotBlank(pageParam)) {
            page.setCurrent(Long.parseLong(pageParam));
        }
        if (StringUtil.isNotBlank(sizeParam)) {
            page.setSize(Long.parseLong(sizeParam));
        }
        if (ObjectUtil.isEmpty(sortParam)) {
            return page;
        }
        for (String param : sortParam) {
            if (!StringUtil.isBlank(param)) {
                String[] split = param.split(",");
                OrderItem orderItem = new OrderItem();
                orderItem.setColumn(StringUtil.cleanIdentifier(split[0]));
                orderItem.setAsc(isOrderAsc(split));
                page.addOrder(new OrderItem[]{orderItem});
            }
        }
        return page;
    }
 
    private static boolean isOrderAsc(String[] split) {
        if (split.length < 2) {
            return false;
        }
        return ORDER_ASC.equalsIgnoreCase(split[1]);
    }
}