原因分析:常量字符串的長度不能長於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); } }