mirror of
https://gitee.com/durcframework/SOP.git
synced 2025-08-12 07:02:14 +08:00
4.0.2
This commit is contained in:
@@ -86,21 +86,21 @@ public class ApiArgumentResolver implements SopHandlerMethodArgumentResolver {
|
|||||||
Class<?> paramType = methodParameter.getParameterType();
|
Class<?> paramType = methodParameter.getParameterType();
|
||||||
// 排除的
|
// 排除的
|
||||||
boolean exclude = (
|
boolean exclude = (
|
||||||
WebRequest.class.isAssignableFrom(paramType) ||
|
WebRequest.class.isAssignableFrom(paramType) ||
|
||||||
ServletRequest.class.isAssignableFrom(paramType) ||
|
ServletRequest.class.isAssignableFrom(paramType) ||
|
||||||
MultipartRequest.class.isAssignableFrom(paramType) ||
|
MultipartRequest.class.isAssignableFrom(paramType) ||
|
||||||
HttpSession.class.isAssignableFrom(paramType) ||
|
HttpSession.class.isAssignableFrom(paramType) ||
|
||||||
(pushBuilder != null && pushBuilder.isAssignableFrom(paramType)) ||
|
(pushBuilder != null && pushBuilder.isAssignableFrom(paramType)) ||
|
||||||
Principal.class.isAssignableFrom(paramType) ||
|
Principal.class.isAssignableFrom(paramType) ||
|
||||||
InputStream.class.isAssignableFrom(paramType) ||
|
InputStream.class.isAssignableFrom(paramType) ||
|
||||||
Reader.class.isAssignableFrom(paramType) ||
|
Reader.class.isAssignableFrom(paramType) ||
|
||||||
HttpMethod.class == paramType ||
|
HttpMethod.class == paramType ||
|
||||||
Locale.class == paramType ||
|
Locale.class == paramType ||
|
||||||
TimeZone.class == paramType ||
|
TimeZone.class == paramType ||
|
||||||
ZoneId.class == paramType ||
|
ZoneId.class == paramType ||
|
||||||
ServletResponse.class.isAssignableFrom(paramType) ||
|
ServletResponse.class.isAssignableFrom(paramType) ||
|
||||||
OutputStream.class.isAssignableFrom(paramType) ||
|
OutputStream.class.isAssignableFrom(paramType) ||
|
||||||
Writer.class.isAssignableFrom(paramType)
|
Writer.class.isAssignableFrom(paramType)
|
||||||
);
|
);
|
||||||
// 除此之外都匹配
|
// 除此之外都匹配
|
||||||
return !exclude;
|
return !exclude;
|
||||||
@@ -119,9 +119,11 @@ public class ApiArgumentResolver implements SopHandlerMethodArgumentResolver {
|
|||||||
) throws Exception {
|
) throws Exception {
|
||||||
if (openApiParams.contains(methodParameter)) {
|
if (openApiParams.contains(methodParameter)) {
|
||||||
Object paramObj = this.getParamObject(methodParameter, nativeWebRequest);
|
Object paramObj = this.getParamObject(methodParameter, nativeWebRequest);
|
||||||
// JSR-303验证
|
if (paramObj != null) {
|
||||||
paramValidator.validateBizParam(paramObj);
|
// JSR-303验证
|
||||||
return paramObj;
|
paramValidator.validateBizParam(paramObj);
|
||||||
|
return paramObj;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
HandlerMethodArgumentResolver resolver = getOtherArgumentResolver(methodParameter);
|
HandlerMethodArgumentResolver resolver = getOtherArgumentResolver(methodParameter);
|
||||||
if (resolver != null) {
|
if (resolver != null) {
|
||||||
@@ -147,20 +149,19 @@ public class ApiArgumentResolver implements SopHandlerMethodArgumentResolver {
|
|||||||
HttpServletRequest request = (HttpServletRequest) nativeWebRequest.getNativeRequest();
|
HttpServletRequest request = (HttpServletRequest) nativeWebRequest.getNativeRequest();
|
||||||
JSONObject requestParams = OpenUtil.getRequestParams(request);
|
JSONObject requestParams = OpenUtil.getRequestParams(request);
|
||||||
String bizContent = requestParams.getString(ParamNames.BIZ_CONTENT_NAME);
|
String bizContent = requestParams.getString(ParamNames.BIZ_CONTENT_NAME);
|
||||||
|
if (bizContent == null) {
|
||||||
|
return null;
|
||||||
|
}
|
||||||
// 方法参数类型
|
// 方法参数类型
|
||||||
Class<?> parameterType = methodParameter.getParameterType();
|
Class<?> parameterType = methodParameter.getParameterType();
|
||||||
Object param;
|
Object param;
|
||||||
if (bizContent != null) {
|
// 如果是json字符串
|
||||||
// 如果是json字符串
|
if (JSONValidator.from(bizContent).validate()) {
|
||||||
if (JSONValidator.from(bizContent).validate()) {
|
param = JSON.parseObject(bizContent, parameterType);
|
||||||
param = JSON.parseObject(bizContent, parameterType);
|
|
||||||
} else {
|
|
||||||
// 否则认为是 aa=1&bb=33 形式
|
|
||||||
Map<String, Object> query = OpenUtil.parseQueryToMap(bizContent);
|
|
||||||
param = new JSONObject(query).toJavaObject(parameterType);
|
|
||||||
}
|
|
||||||
} else {
|
} else {
|
||||||
param = requestParams.toJavaObject(parameterType);
|
// 否则认为是 aa=1&bb=33 形式
|
||||||
|
Map<String, Object> query = OpenUtil.parseQueryToMap(bizContent);
|
||||||
|
param = new JSONObject(query).toJavaObject(parameterType);
|
||||||
}
|
}
|
||||||
this.bindUploadFile(param, request);
|
this.bindUploadFile(param, request);
|
||||||
return param;
|
return param;
|
||||||
@@ -170,7 +171,7 @@ public class ApiArgumentResolver implements SopHandlerMethodArgumentResolver {
|
|||||||
/**
|
/**
|
||||||
* 将上传文件对象绑定到属性中
|
* 将上传文件对象绑定到属性中
|
||||||
*
|
*
|
||||||
* @param param 业务参数
|
* @param param 业务参数
|
||||||
* @param httpServletRequest
|
* @param httpServletRequest
|
||||||
*/
|
*/
|
||||||
protected void bindUploadFile(Object param, HttpServletRequest httpServletRequest) {
|
protected void bindUploadFile(Object param, HttpServletRequest httpServletRequest) {
|
||||||
|
@@ -62,6 +62,15 @@ public class Example1001_BaseController {
|
|||||||
return story;
|
return story;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// 参数绑定
|
||||||
|
@Open(value = "story.param.bind", mergeResult = false)
|
||||||
|
@RequestMapping("/get/param/v1")
|
||||||
|
public StoryResult param(int id, String name) {
|
||||||
|
StoryResult result = new StoryResult();
|
||||||
|
result.setName("参数绑定:id:" + id + ", name:" + name);
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
|
||||||
// 忽略验证
|
// 忽略验证
|
||||||
@Open(value = "story.get.ignore", ignoreValidate = true)
|
@Open(value = "story.get.ignore", ignoreValidate = true)
|
||||||
@RequestMapping("/get/ignore/v1")
|
@RequestMapping("/get/ignore/v1")
|
||||||
|
57
sop-test/src/test/java/com/gitee/sop/test/ParamBindTest.java
Normal file
57
sop-test/src/test/java/com/gitee/sop/test/ParamBindTest.java
Normal file
@@ -0,0 +1,57 @@
|
|||||||
|
package com.gitee.sop.test;
|
||||||
|
|
||||||
|
import com.alibaba.fastjson.JSON;
|
||||||
|
import com.gitee.sop.test.alipay.AlipaySignature;
|
||||||
|
import org.junit.Test;
|
||||||
|
|
||||||
|
import java.text.SimpleDateFormat;
|
||||||
|
import java.util.Date;
|
||||||
|
import java.util.HashMap;
|
||||||
|
import java.util.Map;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 模仿支付宝客户端请求接口
|
||||||
|
*/
|
||||||
|
public class ParamBindTest extends TestBase {
|
||||||
|
|
||||||
|
String url = "http://localhost:8081";
|
||||||
|
String appId = "2019032617262200001";
|
||||||
|
// 平台提供的私钥
|
||||||
|
String privateKey = "MIIEvQIBADANBgkqhkiG9w0BAQEFAASCBKcwggSjAgEAAoIBAQCXJv1pQFqWNA/++OYEV7WYXwexZK/J8LY1OWlP9X0T6wHFOvxNKRvMkJ5544SbgsJpVcvRDPrcxmhPbi/sAhdO4x2PiPKIz9Yni2OtYCCeaiE056B+e1O2jXoLeXbfi9fPivJZkxH/tb4xfLkH3bA8ZAQnQsoXA0SguykMRZntF0TndUfvDrLqwhlR8r5iRdZLB6F8o8qXH6UPDfNEnf/K8wX5T4EB1b8x8QJ7Ua4GcIUqeUxGHdQpzNbJdaQvoi06lgccmL+PHzminkFYON7alj1CjDN833j7QMHdPtS9l7B67fOU/p2LAAkPMtoVBfxQt9aFj7B8rEhGCz02iJIBAgMBAAECggEARqOuIpY0v6WtJBfmR3lGIOOokLrhfJrGTLF8CiZMQha+SRJ7/wOLPlsH9SbjPlopyViTXCuYwbzn2tdABigkBHYXxpDV6CJZjzmRZ+FY3S/0POlTFElGojYUJ3CooWiVfyUMhdg5vSuOq0oCny53woFrf32zPHYGiKdvU5Djku1onbDU0Lw8w+5tguuEZ76kZ/lUcccGy5978FFmYpzY/65RHCpvLiLqYyWTtaNT1aQ/9pw4jX9HO9NfdJ9gYFK8r/2f36ZE4hxluAfeOXQfRC/WhPmiw/ReUhxPznG/WgKaa/OaRtAx3inbQ+JuCND7uuKeRe4osP2jLPHPP6AUwQKBgQDUNu3BkLoKaimjGOjCTAwtp71g1oo+k5/uEInAo7lyEwpV0EuUMwLA/HCqUgR4K9pyYV+Oyb8d6f0+Hz0BMD92I2pqlXrD7xV2WzDvyXM3s63NvorRooKcyfd9i6ccMjAyTR2qfLkxv0hlbBbsPHz4BbU63xhTJp3Ghi0/ey/1HQKBgQC2VsgqC6ykfSidZUNLmQZe3J0p/Qf9VLkfrQ+xaHapOs6AzDU2H2osuysqXTLJHsGfrwVaTs00ER2z8ljTJPBUtNtOLrwNRlvgdnzyVAKHfOgDBGwJgiwpeE9voB1oAV/mXqSaUWNnuwlOIhvQEBwekqNyWvhLqC7nCAIhj3yvNQKBgQCqYbeec56LAhWP903Zwcj9VvG7sESqXUhIkUqoOkuIBTWFFIm54QLTA1tJxDQGb98heoCIWf5x/A3xNI98RsqNBX5JON6qNWjb7/dobitti3t99v/ptDp9u8JTMC7penoryLKK0Ty3bkan95Kn9SC42YxaSghzqkt+uvfVQgiNGQKBgGxU6P2aDAt6VNwWosHSe+d2WWXt8IZBhO9d6dn0f7ORvcjmCqNKTNGgrkewMZEuVcliueJquR47IROdY8qmwqcBAN7Vg2K7r7CPlTKAWTRYMJxCT1Hi5gwJb+CZF3+IeYqsJk2NF2s0w5WJTE70k1BSvQsfIzAIDz2yE1oPHvwVAoGAA6e+xQkVH4fMEph55RJIZ5goI4Y76BSvt2N5OKZKd4HtaV+eIhM3SDsVYRLIm9ZquJHMiZQGyUGnsvrKL6AAVNK7eQZCRDk9KQz+0GKOGqku0nOZjUbAu6A2/vtXAaAuFSFx1rUQVVjFulLexkXR3KcztL1Qu2k5pB6Si0K/uwQ=";
|
||||||
|
|
||||||
|
// 演示参数绑定,没有用用到biz_content
|
||||||
|
@Test
|
||||||
|
public void testGet() throws Exception {
|
||||||
|
|
||||||
|
// 公共请求参数
|
||||||
|
Map<String, String> params = new HashMap<String, String>();
|
||||||
|
params.put("app_id", appId);
|
||||||
|
params.put("method", "story.param.bind");
|
||||||
|
params.put("format", "json");
|
||||||
|
params.put("charset", "utf-8");
|
||||||
|
params.put("sign_type", "RSA2");
|
||||||
|
params.put("timestamp", new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(new Date()));
|
||||||
|
params.put("version", "1.0");
|
||||||
|
|
||||||
|
// 业务参数
|
||||||
|
params.put("id", "1");
|
||||||
|
params.put("name", "葫芦娃");
|
||||||
|
|
||||||
|
String content = AlipaySignature.getSignContent(params);
|
||||||
|
String sign = AlipaySignature.rsa256Sign(content, privateKey, "utf-8");
|
||||||
|
params.put("sign", sign);
|
||||||
|
|
||||||
|
System.out.println("----------- 请求信息 -----------");
|
||||||
|
System.out.println("请求参数:" + buildParamQuery(params));
|
||||||
|
System.out.println("商户秘钥:" + privateKey);
|
||||||
|
System.out.println("待签名内容:" + content);
|
||||||
|
System.out.println("签名(sign):" + sign);
|
||||||
|
System.out.println("URL参数:" + buildUrlQuery(params));
|
||||||
|
|
||||||
|
System.out.println("----------- 返回结果 -----------");
|
||||||
|
String responseData = get(url, params);// 发送请求
|
||||||
|
System.out.println(responseData);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
}
|
Reference in New Issue
Block a user