Java 当我使用字符串构造函数将字节[]转换为字符串时,代码会有异味

Java 当我使用字符串构造函数将字节[]转换为字符串时,代码会有异味,java,base64,Java,Base64,这是我将JWT对象解码为字符串的函数: protected String decodeJWT(String idToken){ String[] splitString = idToken.split("\\."); String base64EncodedBody = splitString[1]; Base64 base64Url = new Base64(true); String idTokenString = new St

这是我将JWT对象解码为字符串的函数:

protected String decodeJWT(String idToken){

    String[] splitString = idToken.split("\\.");
    String base64EncodedBody = splitString[1];
    
    Base64 base64Url = new Base64(true);
    String idTokenString = new String(base64Url.decode(base64EncodedBody));
    StringBuilder sub = new StringBuilder();
    
    int indexStart = idTokenString.indexOf("\"sub\":\"") + 7;
    char c;
    while((c = idTokenString.charAt(indexStart)) != '\"') {
        indexStart++;
        sub.append(c);
    }
    
    return sub.toString();
}
SonarCloud在转换
base64Url.decode(base64EncodedBody)
时检测到代码气味,即
字符串上的
字节[]
。 这就是问题所在:

构造函数不应用于实例化“字符串”, “BigInteger”、“BigDecimal”和基本包装类

String、BigInteger、BigDecimal和用于包装的对象的构造函数 不应使用原语。这样做不太清楚,而且使用更多 而不是在字符串的情况下简单地使用所需的值 将valueOf用于其他一切

如何解决此代码气味?

使用此构造函数

String(byte bytes[],Charset Charset)
constructor

因此,可以根据需要更改代码

String s = new String(base64Url.decode(base64EncodedBody), StandardCharsets.UTF_8);
提及

使用具有byte[]参数但没有Charset参数的字符串构造函数 轻微的代码气味