33import com .alibaba .fastjson .JSON ;
44import com .alibaba .fastjson .JSONArray ;
55import com .alibaba .fastjson .JSONObject ;
6+ import lombok .Getter ;
7+ import lombok .Setter ;
68import org .springframework .data .domain .Sort ;
79import org .springframework .util .StringUtils ;
810import org .springframework .web .context .request .RequestContextHolder ;
1214import java .lang .reflect .Field ;
1315import java .util .ArrayList ;
1416import java .util .Base64 ;
15- import java .util .Enumeration ;
1617import 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