Fegin使用OkHttp3出现IllegalArgumentE

2021-05-12  本文已影响0人  小胖学编程

Feign接口底层使用OkHttp替换默认的Client通信,但是当Header中的value是汉字时,会抛出java.lang.IllegalArgumentException: Unexpected char ...异常。

具体的代码 ( 在 okhttp3 库里面的 okhttp3.Headers.java ) 如下:

private void checkNameAndValue(String name, String value) {
    if (name == null) throw new NullPointerException("name == null");
    if (name.isEmpty()) throw new IllegalArgumentException("name is empty");
    for (int i = 0, length = name.length(); i < length; i++) {
        char c = name.charAt(i);
        if (c <= '\u001f' || c >= '\u007f') {
            throw new IllegalArgumentException(Util.format(
              "Unexpected char %#04x at %d in header name: %s", (int) c, i, name));
        }
    }
    if (value == null) throw new NullPointerException("value == null");
    for (int i = 0, length = value.length(); i < length; i++) {
        char c = value.charAt(i);
        if (c <= '\u001f' || c >= '\u007f') {
            throw new IllegalArgumentException(Util.format(
              "Unexpected char %#04x at %d in %s value: %s", (int) c, i, name, value));
        }
    }
}

以上代码就是当header的key或者value存在汉字抛出异常的原因。

解决方案:

import java.io.UnsupportedEncodingException;
import java.net.URLDecoder;
import java.net.URLEncoder;

public class Test {
    public static void main(String[] args) throws UnsupportedEncodingException {
        String ax = "我是";
        System.out.println(URLEncoder.encode(ax, "UTF-8"));
        System.out.println(URLDecoder.decode(ax, "UTF-8"));
    }
}

对汉字进行encode编码和decode解码,在进行网络传输。

上一篇 下一篇

猜你喜欢

热点阅读