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); + } } } });