報錯:常量字符串過長


原因分析:常量字符串的長度不能長於65535 - 1字節;

由於圖片通過接口傳遞,圖片轉為base64編碼后,字符串很大,故yreport的值很大,有360800個字符。

原代碼:

public class DataEncrypt2Test {
    public static void main(String[] args) throws Exception {
        String pubKey = "省略不寫";
        // 生產批次    
        String requestData = "{\n" +
                "\t\"ycocode\": \"09876543211234567890\",\n" +
                "\t\"yconame\": \"華潤制葯\",\n" +
                "\t\"medicode\": \"B1243253\",\n" +
                "\t\"mediname\": \"當歸\",\n" +
                "\t\"allowname\": \"張山\",\n" +
                "\t\"locality\": \"深圳\",\n" +
                "\t\"batchno\": \"B345353\",\n" +
                "\t\"batchciid\": \"3452352\",\n" +
                "\t\"prodate\": \"2021-10-10\",\n" +
                "\t\"checkdate\": \"2021-11-11\",\n" +
                "\t\"packgg\": \"10/箱\",\n" +
                "\t\"checkname\": \"王五\",\n" +
                "\t\"norm\": \"國標\",\n" +
                "\t\"arts\": \"工藝01\",\n" +
                "\t\"yreport\": \"此處為超長字符串,省略不寫\",\n" +
                "\t\"updatetime\": \"2021-12-12\",\n" +
                "\t\"ybatchid\": \"1232141\",\n" +
                "\t\"quantity\": \"100\",\n" +
                "\t\"unit\": \"kg\",\n" +
                "\t\"billtype\": \"銷售出庫\"\n" +
                "}";
        String encrypt = RSAUtils.encryptByPublicKey(requestData, pubKey);
        System.out.println("requestData===> ");
        System.out.println(encrypt);
    }
}

解決辦法:使用StringBuilder,將字符串分成多段進行拼接

public class DataEncrypt2Test {
    public static void main(String[] args) throws Exception {
        String pubKey = "省略不寫";// 生產批次
        StringBuilder sb = new StringBuilder();
        sb.append("很長字符串1,省略不寫,下同");
        sb.append("很長字符穿2");
        sb.append("很長字符串3");
        sb.append("很長字符串4");
        sb.append("很長字符串5");
        sb.append("很長字符串6");
        sb.append("很長字符串7" );
        sb.append("很長字符串8");
        sb.append("很長字符串9");
        sb.append("很長字符串10");
        sb.append("很長字符串11");
        String str = sb.toString();

        String requestData = "{\n" +
                "\t\"ycocode\": \"09876543211234567890\",\n" +
                "\t\"yconame\": \"眾益制葯\",\n" +
                "\t\"medicode\": \"B1243253\",\n" +
                "\t\"mediname\": \"當歸\",\n" +
                "\t\"allowname\": \"張山\",\n" +
                "\t\"locality\": \"深圳\",\n" +
                "\t\"batchno\": \"B345353\",\n" +
                "\t\"batchciid\": \"3452352\",\n" +
                "\t\"prodate\": \"2021-10-10\",\n" +
                "\t\"checkdate\": \"2021-11-11\",\n" +
                "\t\"packgg\": \"10/箱\",\n" +
                "\t\"checkname\": \"王五\",\n" +
                "\t\"norm\": \"國標\",\n" +
                "\t\"arts\": \"工藝01\",\n" +
                "\t\"yreport\": \""+ str +"\",\n" +
                "\t\"updatetime\": \"2021-12-12\",\n" +
                "\t\"ybatchid\": \"1232141\",\n" +
                "\t\"quantity\": \"100\",\n" +
                "\t\"unit\": \"kg\",\n" +
                "\t\"checkname\": \"王五\",\n" +
                "\t\"billtype\": \"銷售出庫\"\n" +
                "}";
        
        String encrypt = RSAUtils.encryptByPublicKey(requestData, pubKey);
        System.out.println("requestData===> ");
        System.out.println(encrypt);
    }
}

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM