Controller外部接口调用方式设计,sign签名规则
//请求头
accept:*/*
connection:Keep-Alive
user-agent:My-test3
Accept-Charset:UTF-8
Content-Type:application/x-www-form-urlencoded
如果使用x-www-form-urlencoded 传参方式,则使用请求头:My-test1 & My-test2 如果使用json 传参方式,则使用请求头:My-test3
//接收源代码:
protected static ObjectMapper mapper = new ObjectMapper();
if ("My-test1".equals(userAgent) || "My-test2".equals(userAgent)) {//非json格式报文
dataMap = this.parseFormParams(reqContent);
} else {
//json字符串的方式 转换为TreeMap
dataMap = mapper.readValue(reqContent, TreeMap.class);
}
//解析RUL形式的参数
public static Map<String,Object> parseFormParams(String reqContent){//platenum=沪A00250&sign=1d1b3befd94733a943720f7d3c2fa4a3
Map<String,Object> map = new TreeMap<>();
StringTokenizer st = new StringTokenizer(reqContent,"&");
while(st.hasMoreTokens()){
String param = st.nextToken();
int idx = param.indexOf("=");
String key = param.substring(0,idx);
String val = param.substring(idx+1);
map.put(key, val);
}
return map;
}
//签名规则:
StringBuffer sbff = new StringBuffer();
Map<String, Object> dataMap = new TreeMap<>(); //有序,必须有序,否则计算出来的md5 sign字符串不同,验签不通过。
dataMap.put("orderNo","1111222333");
dataMap.put("status","1");
for (Map.Entry<String, Object> m : dataMap.entrySet()) {
sbff.append(m.getKey()).append(m.getValue());
}
String key = sbff.toString().toUpperCase() + "key字符串";
String md5str = md5Encode(key);
System.out.println("md5str="+md5str);
package com.example.core.mydemo.java3;
import java.util.Map;
import java.util.StringTokenizer;
import java.util.TreeMap;
/**
* {platenum=沪A00250, sign=1d1b3befd94733a943720f7d3c2fa4a3}
* dataMap={orderNo=1111222333, status=1}
* dataMap2={orderNo=2111222333, status=2}
*/
public class TreeMapTest {
public static void main(String[] args) {
String ss = "platenum=沪A00250&sign=1d1b3befd94733a943720f7d3c2fa4a3";
System.out.println(parseFormParams(ss));
Map<String, Object> dataMap = new TreeMap<>(); //有序
dataMap.put("orderNo","1111222333");
dataMap.put("status","1");
Map<String, Object> dataMap2 = new TreeMap<>(); //有序
dataMap2.put("status","2");
dataMap2.put("orderNo","2111222333");
System.out.println("dataMap="+dataMap);
System.out.println("dataMap2="+dataMap2);
}
public static Map<String,Object> parseFormParams(String reqContent){//platenum=沪A00250&sign=1d1b3befd94733a943720f7d3c2fa4a3
Map<String,Object> map = new TreeMap<>();
StringTokenizer st = new StringTokenizer(reqContent,"&");
while(st.hasMoreTokens()){
String param = st.nextToken();
int idx = param.indexOf("=");
String key = param.substring(0,idx);
String val = param.substring(idx+1);
map.put(key, val);
}
return map;
}
}