Skip to content

Commit

Permalink
#44
Browse files Browse the repository at this point in the history
  • Loading branch information
xlorne committed Apr 24, 2024
1 parent a0e87cb commit d3c988d
Show file tree
Hide file tree
Showing 5 changed files with 70 additions and 19 deletions.
2 changes: 1 addition & 1 deletion pom.xml
Original file line number Diff line number Diff line change
Expand Up @@ -12,7 +12,7 @@

<groupId>com.codingapi.springboot</groupId>
<artifactId>springboot-parent</artifactId>
<version>2.8.0</version>
<version>2.8.1</version>

<url>https://github.com/codingapi/springboot-framewrok</url>
<name>springboot-parent</name>
Expand Down
2 changes: 1 addition & 1 deletion springboot-starter-data-fast/pom.xml
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@
<parent>
<artifactId>springboot-parent</artifactId>
<groupId>com.codingapi.springboot</groupId>
<version>2.8.0</version>
<version>2.8.1</version>
</parent>
<modelVersion>4.0.0</modelVersion>

Expand Down
2 changes: 1 addition & 1 deletion springboot-starter-security/pom.xml
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@
<parent>
<artifactId>springboot-parent</artifactId>
<groupId>com.codingapi.springboot</groupId>
<version>2.8.0</version>
<version>2.8.1</version>
</parent>

<artifactId>springboot-starter-security</artifactId>
Expand Down
2 changes: 1 addition & 1 deletion springboot-starter/pom.xml
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@
<parent>
<groupId>com.codingapi.springboot</groupId>
<artifactId>springboot-parent</artifactId>
<version>2.8.0</version>
<version>2.8.1</version>
</parent>
<artifactId>springboot-starter</artifactId>

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -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;
Expand All @@ -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对象
Expand Down Expand Up @@ -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) {
Expand All @@ -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;
Expand All @@ -85,14 +95,20 @@ 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);
pageRequest.addFilter(key, Relation.EQUAL, v);
}

private Object parseObject(String value, Class<?> keyClass) {
if(value.getClass().equals(keyClass)) {
if (value.getClass().equals(keyClass)) {
return value;
}
return JSON.parseObject(value, keyClass);
Expand Down Expand Up @@ -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<ParamOperation> 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<ParamOperation> loadParams = loadParamOperations();

String sort = request.getParameter("sort");
if (StringUtils.hasLength(sort)) {
sort = decode(sort);
Expand Down Expand Up @@ -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<String> values = value.stream().map(Object::toString).collect(Collectors.toList());
List<String> values = value.stream().map(Object::toString).toList();
content.addFilter(key, values);
}
}
}
}

Enumeration<String> 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;
}
Expand Down

0 comments on commit d3c988d

Please sign in to comment.