WebService接口参数校验实践

最近一直在和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
  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值