4
4
import com .alibaba .fastjson .JSONArray ;
5
5
import com .alibaba .fastjson .JSONObject ;
6
6
import jakarta .servlet .http .HttpServletRequest ;
7
+ import lombok .Getter ;
8
+ import lombok .Setter ;
7
9
import org .springframework .data .domain .Sort ;
8
10
import org .springframework .util .StringUtils ;
9
11
import org .springframework .web .context .request .RequestContextHolder ;
15
17
import java .util .List ;
16
18
17
19
/**
18
- * HttpServletRequest 请求参数解析成 PageRequest对象
20
+ * HttpServletRequest 请求参数解析成 PageRequest对象
19
21
*/
20
22
public class SearchRequest {
21
23
@@ -50,6 +52,15 @@ public void addSort(Sort sort) {
50
52
51
53
public void removeFilter (String key ) {
52
54
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 );
53
64
}
54
65
55
66
public PageRequest addFilter (String key , Relation relation , Object ... value ) {
@@ -69,7 +80,6 @@ public PageRequest orFilters(Filter... filters) {
69
80
}
70
81
71
82
72
-
73
83
private String decode (String value ) {
74
84
return new String (Base64 .getDecoder ().decode (value ));
75
85
}
@@ -85,14 +95,20 @@ public ClassContent(Class<?> clazz, PageRequest pageRequest) {
85
95
this .pageRequest = pageRequest ;
86
96
}
87
97
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
+
88
104
public void addFilter (String key , String value ) {
89
105
Class <?> keyClass = getKeyType (key );
90
106
Object v = parseObject (value , keyClass );
91
107
pageRequest .addFilter (key , Relation .EQUAL , v );
92
108
}
93
109
94
110
private Object parseObject (String value , Class <?> keyClass ) {
95
- if (value .getClass ().equals (keyClass )) {
111
+ if (value .getClass ().equals (keyClass )) {
96
112
return value ;
97
113
}
98
114
return JSON .parseObject (value , keyClass );
@@ -124,12 +140,37 @@ private Class<?> getKeyType(String key) {
124
140
125
141
}
126
142
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
+
127
166
public PageRequest toPageRequest (Class <?> clazz ) {
128
167
pageRequest .setCurrent (current );
129
168
pageRequest .setPageSize (pageSize );
130
169
131
170
ClassContent content = new ClassContent (clazz , pageRequest );
132
171
172
+ List <ParamOperation > loadParams = loadParamOperations ();
173
+
133
174
String sort = request .getParameter ("sort" );
134
175
if (StringUtils .hasLength (sort )) {
135
176
sort = decode (sort );
@@ -169,7 +210,19 @@ public PageRequest toPageRequest(Class<?> clazz) {
169
210
if (!removeKeys .contains (key )) {
170
211
String value = request .getParameter (key );
171
212
if (StringUtils .hasLength (value )) {
172
- 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
+ }
173
226
}
174
227
}
175
228
});
0 commit comments