我們將請求體加密后,訪問后台,在獲取applyData時報錯。
原代碼如下:
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);
}
}
后台代碼:
@RestController @RequestMapping("/api") public class ProducerBatchController { @Autowired private ProduceBatchService produceBatchService; @PostMapping("/pro") @ResponseBody public String saveProduce(@RequestBody JSONObject params) { JSONObject applyData = params.getJSONObject("applyData"); return produceBatchService.saveProduceBatch(applyData); } }
從params中獲取applyData時報錯:Message is larger than modules
原因分析:由於requestData中有很多\t或\n,並不是純粹的json字符串,導致fastjson在解析的時候報錯。
解決辦法,封裝成JSONObject
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(); JSONObject json = new JSONObject(); json.put("ycocode","09876543211234567890"); json.put("yconame","華潤制葯"); json.put("medicode","B1243253"); json.put("mediname","當歸"); json.put("allowname","張山"); json.put("locality","深圳"); json.put("batchno","B345353"); json.put("batchciid","3452352"); json.put("prodate","2021-10-10"); json.put("checkdate","2021-11-11"); json.put("packgg","10/箱"); json.put("checkname","王五"); json.put("norm","國標"); json.put("arts","工藝01"); json.put("yreport",str); json.put("creport",str); json.put("updatetime","2021-12-12"); json.put("ybatchid","1232141"); json.put("unit","kg"); json.put("quantity","100"); json.put("billtype","銷售出庫"); String encrypt = RSAUtils.encryptByPublicKey(json.toString(), pubKey); System.out.println("requestData===> "); System.out.println(encrypt); } }
問題解決。