最近一直在和WebService打交道,需要接收客户端的请求,解析参数。
一般来说参数可分为系统级参数,和应用级参数。而这些参数又可分为必须和非必须。
举个接口对接来说:
系统级参数有method,sessionKey,format,其中format是可选参数,默认为XML,其他为必须参数
应用级参数有fields,pageNo,pageSize,startModified,endModified,其中startModified和endModified是可选,默认为”“,而且pageNo和pageSize需要转换为long类型使用
由此进行参数校验至少需要考虑以下情况:
1. 可选参数有没有传递?
2. 参数是否空值?
3. 需要参数强制类型转换时如何防止转换异常(因为像HttpClient传送参数都是以String类型方式传送)
4. 参数默认值设置
一般接口都采用HTTP+POST方式,参数都以“key-value”的方式通过“&”连接置于POST请求的Body中:
?method=XXXX&sessionKey=XXXX&fields=XXXX&pageNo=XXXX&pageModifed=XXXX
首先,需要将参数全部获取,并转换到Map中,可以通过一个封装方法处理:
public static Map<String, String> parseRequestString(String str) {
Map<String, String> parametersMap = new HashMap<String, String>();
String[] parameters = str.split("&");
if (parameters.length > 0) {
for (String parameter : parameters) {
parametersMap.put(parameter.substring(0, parameter.indexOf("=")),
parameter.substring(parameter.indexOf("=") + 1));
}
}
return parametersMap;
}
使用的是@RequestBody 注解,将Body内容当中字符串来处理,也可以使用@RequestParam Map
Map<String, String> parametersMap = parseRequestString(requestString);
String sessionKey;
if (parametersMap.containsKey("sessionKey")) {
sessionKey = parametersMap.get("sessionKey");
} else {
return "sessionKey参数不存在";
}
if (sessionKey.length() == 0 || sessionKey.trim().length() == 0 || sessionKey == null) {
return "sessionKey参数无效";
}
String fields;
if (parametersMap.containsKey("fields")) {
fields = parametersMap.get("fields");
} else {
return "fields参数不存在";
}
if (fields.length() == 0 || fields.trim().length() == 0