Skip to content

Commit 958588b

Browse files
committed
[#11] ✨ RequestParamResolver 解析器
1 parent e232701 commit 958588b

8 files changed

+59
-30
lines changed

sky-http-springboot-starter/src/main/java/sky/SkyHttpServerAutoConfiguration.java

+9-5
Original file line numberDiff line numberDiff line change
@@ -16,11 +16,12 @@
1616
import sky.starter.bean.SkyHandlerMappingContainer;
1717
import sky.starter.bean.SkyWebServer;
1818
import sky.starter.bean.SkyWebServerFactory;
19+
import sky.starter.bean.impl.EveryRequestResultHandler;
20+
import sky.starter.bean.impl.PathVariableResolver;
21+
import sky.starter.bean.impl.RequestParamResolver;
22+
import sky.starter.bean.impl.ResponseBodyRequestResultHandler;
1923
import sky.starter.domain.SkyRouteDefinition;
20-
import sky.starter.ext.EveryRequestResultHandler;
2124
import sky.starter.ext.HandlerMappingContainer;
22-
import sky.starter.ext.PathVariableResolver;
23-
import sky.starter.ext.ResponseBodyRequestResultHandler;
2425
import sky.starter.props.SkyHttpServerProps;
2526
import sky.starter.unsupport.SkyDispatcherServletPath;
2627
import sky.starter.unsupport.SkyServletContext;
@@ -63,14 +64,17 @@ SkyWebServerFactory SkyWebServerFactory(WebMvcConfigurationSupport webMvcConfigu
6364
@Bean
6465
RequestArgumentResolverContainer requestArgumentResolverContainer() {
6566
return new RequestArgumentResolverContainer()
66-
.add(new PathVariableResolver());
67+
.add(new PathVariableResolver())
68+
.add(new RequestParamResolver())
69+
;
6770
}
6871

6972
@Bean
7073
RequestResultHandlerContainer requestResultHandlerContainer() {
7174
return new RequestResultHandlerContainer()
7275
.add(new ResponseBodyRequestResultHandler())
73-
.add(new EveryRequestResultHandler());
76+
.add(new EveryRequestResultHandler())
77+
;
7478
}
7579

7680
/**

sky-http-springboot-starter/src/main/java/sky/starter/ext/EveryRequestResultHandler.java sky-http-springboot-starter/src/main/java/sky/starter/bean/impl/EveryRequestResultHandler.java

+2-1
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,9 @@
1-
package sky.starter.ext;
1+
package sky.starter.bean.impl;
22

33
import http.HttpServerResponse;
44
import org.springframework.core.Ordered;
55
import sky.starter.domain.SkyRouteDefinition;
6+
import sky.starter.ext.RequestResultHandler;
67

78
/**
89
* support every request.

sky-http-springboot-starter/src/main/java/sky/starter/ext/PathVariableResolver.java sky-http-springboot-starter/src/main/java/sky/starter/bean/impl/PathVariableResolver.java

+2-1
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,9 @@
1-
package sky.starter.ext;
1+
package sky.starter.bean.impl;
22

33
import http.HttpServerRequest;
44
import io.github.fzdwx.lambada.lang.NvMap;
55
import sky.starter.domain.SkyHttpMethod;
6+
import sky.starter.ext.RequestArgumentResolver;
67

78
/**
89
* @author <a href="mailto:likelovec@gmail.com">fzdwx</a>
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,41 @@
1+
package sky.starter.bean.impl;
2+
3+
import http.HttpServerRequest;
4+
import io.github.fzdwx.lambada.Assert;
5+
import io.github.fzdwx.lambada.lang.NvMap;
6+
import sky.starter.domain.SkyHttpMethod;
7+
import sky.starter.ext.RequestArgumentResolver;
8+
9+
/**
10+
* @author <a href="mailto:likelovec@gmail.com">fzdwx</a>
11+
* @date 2022/5/19 20:27
12+
*/
13+
public class RequestParamResolver implements RequestArgumentResolver {
14+
15+
@Override
16+
public boolean support(final SkyHttpMethod.SkyHttpMethodParameter parameter) {
17+
return parameter.getRequestParam() != null;
18+
}
19+
20+
@Override
21+
public Object apply(final HttpServerRequest request, final SkyHttpMethod.SkyHttpMethodParameter parameter, final NvMap parVals) {
22+
String res = null;
23+
24+
final var attr = parameter.getRequestParamAttr();
25+
final var name = attr.get("name");
26+
final var required = attr.get("required");
27+
28+
if (name != null) {
29+
res = request.params().get(name);
30+
} else {
31+
res = request.params().get(parameter.getParameterName());
32+
}
33+
34+
if (((boolean) required)) {
35+
Assert.nonNull(res, "required param is null");
36+
}
37+
38+
// todo 类型参数转换
39+
return res;
40+
}
41+
}

sky-http-springboot-starter/src/main/java/sky/starter/ext/ResponseBodyRequestResultHandler.java sky-http-springboot-starter/src/main/java/sky/starter/bean/impl/ResponseBodyRequestResultHandler.java

+2-1
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,9 @@
1-
package sky.starter.ext;
1+
package sky.starter.bean.impl;
22

33
import http.HttpServerResponse;
44
import org.springframework.core.Ordered;
55
import sky.starter.domain.SkyRouteDefinition;
6+
import sky.starter.ext.RequestResultHandler;
67

78
/**
89
* support for {@link org.springframework.web.bind.annotation.ResponseBody}

sky-http-springboot-starter/src/main/java/sky/starter/domain/SkyHttpMethod.java

+1
Original file line numberDiff line numberDiff line change
@@ -575,6 +575,7 @@ public Annotation[] getParameterAnnotations() {
575575
}
576576

577577
@Override
578+
@NonNull
578579
public String getParameterName() {
579580
return this.parameterName;
580581
}

sky-http-springboot-starter/src/main/java/sky/starter/ext/RequestArgumentResolver.java

+2
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,8 @@
22

33
import http.HttpServerRequest;
44
import io.github.fzdwx.lambada.lang.NvMap;
5+
import sky.starter.bean.impl.PathVariableResolver;
6+
import sky.starter.bean.impl.RequestParamResolver;
57
import sky.starter.domain.SkyHttpMethod;
68

79
/**

sky-http-springboot-starter/src/main/java/sky/starter/ext/RequestParamResolver.java

-22
This file was deleted.

0 commit comments

Comments
 (0)