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

 

posted on 2021-12-17 19:13  周文豪  阅读(2698)  评论(0编辑  收藏  举报