Java解决:返回值是带有中文参数的url地址(手机无法访问,pc正常)

get请求的url地址连接含有中文的解决方案

问题

1、最近项目中有个需求是将获取的参数变成访问外部系统的接口访问链接,并且是手机端访问,但是由于手机端无法进行识别中文参数类型,如以下格式的连接:http://112.74.194.118:8088/bookManage/xdWeixin/form.html?dept_id=191&dept_name=中文中文&item_id=356&item_name=中文中文中文&_t=1590483360989
2、加上其他项目接口针对参数也有限制(定义了顺序和个数),因此需要满足接口顺序参数要求

解决思路

带有中文参数的url转义为encodeURI编码格式,即utf-8编码类型;针对顺序参数采取LinkedHashMap用来进行key值的顺序保存。

解决方案

编写一个Java方法,用于针对接口定死的部分和活动参数params,代码如下:

/**
 * 根据参数列表和父路径生成可访问的url连接
 * @param p_url 接口父路径
 * @param params 参数列表
 * @return
 * @throws UnsupportedEncodingException
 */
private String ecodeUrlParams2Utf8(String p_url, LinkedHashMap<String, Object> params) throws UnsupportedEncodingException {
     StringBuilder url = new StringBuilder(p_url);
     //判断当前传入的父路径url是否含有‘?’结尾
     if (url.indexOf("?") < 0) {
         url.append('?');
     }
     Set<String> keys =  params.keySet();
     for (String name : keys) {
         url.append('&');
         url.append(name);
         url.append('=');
         //做URLEncoder处理
         url.append(URLEncoder.encode(String.valueOf(params.get(name)), "UTF-8"));
     }
     return url.toString().replace( "?&", "?");
}

以上就解决了中文参数url顺序传参的问题,
望诸君共勉。。。。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值