Skip to content

Commit d3c988d

Browse files
committed
1 parent a0e87cb commit d3c988d

File tree

5 files changed

+70
-19
lines changed

5 files changed

+70
-19
lines changed

pom.xml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,7 @@
1212

1313
<groupId>com.codingapi.springboot</groupId>
1414
<artifactId>springboot-parent</artifactId>
15-
<version>2.8.0</version>
15+
<version>2.8.1</version>
1616

1717
<url>https://github.com/codingapi/springboot-framewrok</url>
1818
<name>springboot-parent</name>

springboot-starter-data-fast/pom.xml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@
55
<parent>
66
<artifactId>springboot-parent</artifactId>
77
<groupId>com.codingapi.springboot</groupId>
8-
<version>2.8.0</version>
8+
<version>2.8.1</version>
99
</parent>
1010
<modelVersion>4.0.0</modelVersion>
1111

springboot-starter-security/pom.xml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@
66
<parent>
77
<artifactId>springboot-parent</artifactId>
88
<groupId>com.codingapi.springboot</groupId>
9-
<version>2.8.0</version>
9+
<version>2.8.1</version>
1010
</parent>
1111

1212
<artifactId>springboot-starter-security</artifactId>

springboot-starter/pom.xml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@
55
<parent>
66
<groupId>com.codingapi.springboot</groupId>
77
<artifactId>springboot-parent</artifactId>
8-
<version>2.8.0</version>
8+
<version>2.8.1</version>
99
</parent>
1010
<artifactId>springboot-starter</artifactId>
1111

springboot-starter/src/main/java/com/codingapi/springboot/framework/dto/request/SearchRequest.java

Lines changed: 66 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,8 @@
33
import com.alibaba.fastjson.JSON;
44
import com.alibaba.fastjson.JSONArray;
55
import com.alibaba.fastjson.JSONObject;
6+
import lombok.Getter;
7+
import lombok.Setter;
68
import org.springframework.data.domain.Sort;
79
import org.springframework.util.StringUtils;
810
import org.springframework.web.context.request.RequestContextHolder;
@@ -12,9 +14,7 @@
1214
import java.lang.reflect.Field;
1315
import java.util.ArrayList;
1416
import java.util.Base64;
15-
import java.util.Enumeration;
1617
import java.util.List;
17-
import java.util.stream.Collectors;
1818

1919
/**
2020
* HttpServletRequest 请求参数解析成 PageRequest对象
@@ -46,17 +46,21 @@ public void setPageSize(int pageSize) {
4646
this.removeKeys.add("pageSize");
4747
}
4848

49-
private String decode(String value) {
50-
return new String(Base64.getDecoder().decode(value));
51-
}
52-
53-
5449
public void addSort(Sort sort) {
5550
pageRequest.addSort(sort);
5651
}
5752

5853
public void removeFilter(String key) {
5954
pageRequest.removeFilter(key);
55+
this.removeKeys.add(key);
56+
}
57+
58+
public String getParameter(String key) {
59+
return request.getParameter(key);
60+
}
61+
62+
public String[] getParameterValues(String key) {
63+
return request.getParameterValues(key);
6064
}
6165

6266
public PageRequest addFilter(String key, Relation relation, Object... value) {
@@ -75,6 +79,12 @@ public PageRequest orFilters(Filter... filters) {
7579
return pageRequest.orFilters(filters);
7680
}
7781

82+
83+
private String decode(String value) {
84+
return new String(Base64.getDecoder().decode(value));
85+
}
86+
87+
7888
static class ClassContent {
7989

8090
private final Class<?> clazz;
@@ -85,14 +95,20 @@ public ClassContent(Class<?> clazz, PageRequest pageRequest) {
8595
this.pageRequest = pageRequest;
8696
}
8797

98+
public void addFilter(String key, Relation relation, String value) {
99+
Class<?> keyClass = getKeyType(key);
100+
Object v = parseObject(value, keyClass);
101+
pageRequest.addFilter(key, relation, v);
102+
}
103+
88104
public void addFilter(String key, String value) {
89105
Class<?> keyClass = getKeyType(key);
90106
Object v = parseObject(value, keyClass);
91107
pageRequest.addFilter(key, Relation.EQUAL, v);
92108
}
93109

94110
private Object parseObject(String value, Class<?> keyClass) {
95-
if(value.getClass().equals(keyClass)) {
111+
if (value.getClass().equals(keyClass)) {
96112
return value;
97113
}
98114
return JSON.parseObject(value, keyClass);
@@ -124,12 +140,37 @@ private Class<?> getKeyType(String key) {
124140

125141
}
126142

143+
@Setter
144+
@Getter
145+
static class ParamOperation {
146+
private String key;
147+
private String type;
148+
149+
public Relation getOperation() {
150+
return Relation.valueOf(type);
151+
}
152+
}
153+
154+
private List<ParamOperation> loadParamOperations() {
155+
String params = request.getParameter("params");
156+
if (StringUtils.hasLength(params)) {
157+
params = decode(params);
158+
if (JSON.isValid(params)) {
159+
removeKeys.add("params");
160+
return JSON.parseArray(params, ParamOperation.class);
161+
}
162+
}
163+
return null;
164+
}
165+
127166
public PageRequest toPageRequest(Class<?> clazz) {
128167
pageRequest.setCurrent(current);
129168
pageRequest.setPageSize(pageSize);
130169

131170
ClassContent content = new ClassContent(clazz, pageRequest);
132171

172+
List<ParamOperation> loadParams = loadParamOperations();
173+
133174
String sort = request.getParameter("sort");
134175
if (StringUtils.hasLength(sort)) {
135176
sort = decode(sort);
@@ -157,24 +198,34 @@ public PageRequest toPageRequest(Class<?> clazz) {
157198
for (String key : jsonObject.keySet()) {
158199
JSONArray value = jsonObject.getJSONArray(key);
159200
if (value != null && !value.isEmpty()) {
160-
List<String> values = value.stream().map(Object::toString).collect(Collectors.toList());
201+
List<String> values = value.stream().map(Object::toString).toList();
161202
content.addFilter(key, values);
162203
}
163204
}
164205
}
165206
}
166207

167-
Enumeration<String> enumeration = request.getParameterNames();
168-
while (enumeration.hasMoreElements()) {
169-
String key = enumeration.nextElement();
208+
209+
request.getParameterNames().asIterator().forEachRemaining(key -> {
170210
if (!removeKeys.contains(key)) {
171211
String value = request.getParameter(key);
172212
if (StringUtils.hasLength(value)) {
173-
content.addFilter(key, value);
213+
if (loadParams != null) {
214+
ParamOperation operation = loadParams.stream()
215+
.filter(paramOperation -> paramOperation.getKey().equals(key))
216+
.findFirst()
217+
.orElse(null);
218+
if (operation != null) {
219+
content.addFilter(key, operation.getOperation(), value);
220+
} else {
221+
content.addFilter(key, value);
222+
}
223+
} else {
224+
content.addFilter(key, value);
225+
}
174226
}
175227
}
176-
}
177-
228+
});
178229

179230
return pageRequest;
180231
}

0 commit comments

Comments
 (0)