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顺序传参的问题,
望诸君共勉。。。。

你可能感兴趣的:(Java,SpringBoot)