From d3c988d86af48b930dfce3d9ace6655df9abe15b Mon Sep 17 00:00:00 2001
From: xlorne <1991wangliang@gmail.com>
Date: Wed, 24 Apr 2024 11:00:29 +0800
Subject: [PATCH] #44
---
pom.xml | 2 +-
springboot-starter-data-fast/pom.xml | 2 +-
springboot-starter-security/pom.xml | 2 +-
springboot-starter/pom.xml | 2 +-
.../framework/dto/request/SearchRequest.java | 81 +++++++++++++++----
5 files changed, 70 insertions(+), 19 deletions(-)
diff --git a/pom.xml b/pom.xml
index 6bcb044d..631d99da 100644
--- a/pom.xml
+++ b/pom.xml
@@ -12,7 +12,7 @@
com.codingapi.springboot
springboot-parent
- 2.8.0
+ 2.8.1
https://github.com/codingapi/springboot-framewrok
springboot-parent
diff --git a/springboot-starter-data-fast/pom.xml b/springboot-starter-data-fast/pom.xml
index 027c6057..d2ff620f 100644
--- a/springboot-starter-data-fast/pom.xml
+++ b/springboot-starter-data-fast/pom.xml
@@ -5,7 +5,7 @@
springboot-parent
com.codingapi.springboot
- 2.8.0
+ 2.8.1
4.0.0
diff --git a/springboot-starter-security/pom.xml b/springboot-starter-security/pom.xml
index f7f43525..b850a475 100644
--- a/springboot-starter-security/pom.xml
+++ b/springboot-starter-security/pom.xml
@@ -6,7 +6,7 @@
springboot-parent
com.codingapi.springboot
- 2.8.0
+ 2.8.1
springboot-starter-security
diff --git a/springboot-starter/pom.xml b/springboot-starter/pom.xml
index 386380dd..cc8b7b28 100644
--- a/springboot-starter/pom.xml
+++ b/springboot-starter/pom.xml
@@ -5,7 +5,7 @@
com.codingapi.springboot
springboot-parent
- 2.8.0
+ 2.8.1
springboot-starter
diff --git a/springboot-starter/src/main/java/com/codingapi/springboot/framework/dto/request/SearchRequest.java b/springboot-starter/src/main/java/com/codingapi/springboot/framework/dto/request/SearchRequest.java
index 07c53bdd..2e95c80f 100644
--- a/springboot-starter/src/main/java/com/codingapi/springboot/framework/dto/request/SearchRequest.java
+++ b/springboot-starter/src/main/java/com/codingapi/springboot/framework/dto/request/SearchRequest.java
@@ -3,6 +3,8 @@
import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject;
+import lombok.Getter;
+import lombok.Setter;
import org.springframework.data.domain.Sort;
import org.springframework.util.StringUtils;
import org.springframework.web.context.request.RequestContextHolder;
@@ -12,9 +14,7 @@
import java.lang.reflect.Field;
import java.util.ArrayList;
import java.util.Base64;
-import java.util.Enumeration;
import java.util.List;
-import java.util.stream.Collectors;
/**
* HttpServletRequest 请求参数解析成 PageRequest对象
@@ -46,17 +46,21 @@ public void setPageSize(int pageSize) {
this.removeKeys.add("pageSize");
}
- private String decode(String value) {
- return new String(Base64.getDecoder().decode(value));
- }
-
-
public void addSort(Sort sort) {
pageRequest.addSort(sort);
}
public void removeFilter(String key) {
pageRequest.removeFilter(key);
+ this.removeKeys.add(key);
+ }
+
+ public String getParameter(String key) {
+ return request.getParameter(key);
+ }
+
+ public String[] getParameterValues(String key) {
+ return request.getParameterValues(key);
}
public PageRequest addFilter(String key, Relation relation, Object... value) {
@@ -75,6 +79,12 @@ public PageRequest orFilters(Filter... filters) {
return pageRequest.orFilters(filters);
}
+
+ private String decode(String value) {
+ return new String(Base64.getDecoder().decode(value));
+ }
+
+
static class ClassContent {
private final Class> clazz;
@@ -85,6 +95,12 @@ public ClassContent(Class> clazz, PageRequest pageRequest) {
this.pageRequest = pageRequest;
}
+ public void addFilter(String key, Relation relation, String value) {
+ Class> keyClass = getKeyType(key);
+ Object v = parseObject(value, keyClass);
+ pageRequest.addFilter(key, relation, v);
+ }
+
public void addFilter(String key, String value) {
Class> keyClass = getKeyType(key);
Object v = parseObject(value, keyClass);
@@ -92,7 +108,7 @@ public void addFilter(String key, String value) {
}
private Object parseObject(String value, Class> keyClass) {
- if(value.getClass().equals(keyClass)) {
+ if (value.getClass().equals(keyClass)) {
return value;
}
return JSON.parseObject(value, keyClass);
@@ -124,12 +140,37 @@ private Class> getKeyType(String key) {
}
+ @Setter
+ @Getter
+ static class ParamOperation {
+ private String key;
+ private String type;
+
+ public Relation getOperation() {
+ return Relation.valueOf(type);
+ }
+ }
+
+ private List loadParamOperations() {
+ String params = request.getParameter("params");
+ if (StringUtils.hasLength(params)) {
+ params = decode(params);
+ if (JSON.isValid(params)) {
+ removeKeys.add("params");
+ return JSON.parseArray(params, ParamOperation.class);
+ }
+ }
+ return null;
+ }
+
public PageRequest toPageRequest(Class> clazz) {
pageRequest.setCurrent(current);
pageRequest.setPageSize(pageSize);
ClassContent content = new ClassContent(clazz, pageRequest);
+ List loadParams = loadParamOperations();
+
String sort = request.getParameter("sort");
if (StringUtils.hasLength(sort)) {
sort = decode(sort);
@@ -157,24 +198,34 @@ public PageRequest toPageRequest(Class> clazz) {
for (String key : jsonObject.keySet()) {
JSONArray value = jsonObject.getJSONArray(key);
if (value != null && !value.isEmpty()) {
- List values = value.stream().map(Object::toString).collect(Collectors.toList());
+ List values = value.stream().map(Object::toString).toList();
content.addFilter(key, values);
}
}
}
}
- Enumeration enumeration = request.getParameterNames();
- while (enumeration.hasMoreElements()) {
- String key = enumeration.nextElement();
+
+ request.getParameterNames().asIterator().forEachRemaining(key -> {
if (!removeKeys.contains(key)) {
String value = request.getParameter(key);
if (StringUtils.hasLength(value)) {
- content.addFilter(key, value);
+ if (loadParams != null) {
+ ParamOperation operation = loadParams.stream()
+ .filter(paramOperation -> paramOperation.getKey().equals(key))
+ .findFirst()
+ .orElse(null);
+ if (operation != null) {
+ content.addFilter(key, operation.getOperation(), value);
+ } else {
+ content.addFilter(key, value);
+ }
+ } else {
+ content.addFilter(key, value);
+ }
}
}
- }
-
+ });
return pageRequest;
}