From 5c448ffe9f1792ba798c19cad1e838a87251194f Mon Sep 17 00:00:00 2001
From: xlorne <1991wangliang@gmail.com>
Date: Wed, 24 Apr 2024 11:00:14 +0800
Subject: [PATCH] #44
---
pom.xml | 4 +-
springboot-starter-data-fast/pom.xml | 2 +-
springboot-starter-security/pom.xml | 2 +-
springboot-starter/pom.xml | 2 +-
.../framework/dto/request/SearchRequest.java | 61 +++++++++++++++++--
5 files changed, 62 insertions(+), 9 deletions(-)
diff --git a/pom.xml b/pom.xml
index 64d1be66..63520d6b 100644
--- a/pom.xml
+++ b/pom.xml
@@ -6,13 +6,13 @@
org.springframework.boot
spring-boot-starter-parent
- 3.2.4
+ 3.2.5
com.codingapi.springboot
springboot-parent
- 3.2.0
+ 3.2.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 0f757bed..c908d95f 100644
--- a/springboot-starter-data-fast/pom.xml
+++ b/springboot-starter-data-fast/pom.xml
@@ -5,7 +5,7 @@
springboot-parent
com.codingapi.springboot
- 3.2.0
+ 3.2.1
4.0.0
diff --git a/springboot-starter-security/pom.xml b/springboot-starter-security/pom.xml
index cd0e09e4..08dd814a 100644
--- a/springboot-starter-security/pom.xml
+++ b/springboot-starter-security/pom.xml
@@ -6,7 +6,7 @@
springboot-parent
com.codingapi.springboot
- 3.2.0
+ 3.2.1
springboot-starter-security
diff --git a/springboot-starter/pom.xml b/springboot-starter/pom.xml
index a4bda8f6..6c4b724c 100644
--- a/springboot-starter/pom.xml
+++ b/springboot-starter/pom.xml
@@ -5,7 +5,7 @@
com.codingapi.springboot
springboot-parent
- 3.2.0
+ 3.2.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 bd1ff6b8..168e6df6 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
@@ -4,6 +4,8 @@
import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject;
import jakarta.servlet.http.HttpServletRequest;
+import lombok.Getter;
+import lombok.Setter;
import org.springframework.data.domain.Sort;
import org.springframework.util.StringUtils;
import org.springframework.web.context.request.RequestContextHolder;
@@ -15,7 +17,7 @@
import java.util.List;
/**
- * HttpServletRequest 请求参数解析成 PageRequest对象
+ * HttpServletRequest 请求参数解析成 PageRequest对象
*/
public class SearchRequest {
@@ -50,6 +52,15 @@ public void addSort(Sort 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) {
@@ -69,7 +80,6 @@ public PageRequest orFilters(Filter... filters) {
}
-
private String decode(String value) {
return new String(Base64.getDecoder().decode(value));
}
@@ -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);
@@ -169,7 +210,19 @@ public PageRequest toPageRequest(Class> clazz) {
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);
+ }
}
}
});