例子,
JSON:

代碼:
@RequestMapping(params = "xxx", method = RequestMethod.GET) @ResponseBody @ServiceLog public AjaxModel getParcelsByExpressCompanyWaybillNo(@RequestParam (value = "expressWaybillNos") String expressWaybillNosJson) throws JsonParseException, JsonMappingException, IOException { List<String> expressWaybillNos = JacksonUtils.fromJson(expressWaybillNosJson, ArrayList.class, String.class); List<Parcel> parcels = parcelService.getParcelByExpressCompanyWaybillNos(expressWaybillNos); System.out.println(JacksonUtils.toJson(parcels)); AjaxModel model = new AjaxModel(true); model.setData(JacksonUtils.toJson(parcels)); model.setMsg("獲取包裹信息成功"); return model; }
上面的例子,是生成的 JSON 作為字符串賦值到 model 對象的 data 字段,然后 Spring MVC 返回 model,把 model 序列化成 JSON,Jackson 是這樣處理的:把類型為字符串的 data 字段轉化成字符串,也就是直接將其被雙引號包裹,那么 data 的值也就是那段 JSON 被雙引號包裹,那么 JSON 里面的雙引號就需要被轉義,需要加上斜杠,;而如果客戶端要把這個 model 對象序列化得到的 JSON 轉換成 model 對象,那么應該是這樣處理的,把 data 的值,也就是帶有大量斜杠的字符串,賦值到目標的 model 對象的 data 字段,那么,只要如下,就能把字段 data 的值轉化成 List<Parcel> 對象:
String test = FileUtils.readFileToString(new File("C:\\Users\\Administrator\\Desktop\\test.txt")); AjaxModel model = JacksonUtils.fromJson(test, AjaxModel.class); System.out.println(model.getData().toString()); List<Parcel> parcels = JacksonUtils.fromJson(model.getData().toString(), List.class, Parcel.class); System.out.println(parcels.get(0).getAssBillNo());
test 對象的數據來源就是一個包含上述文本的 .txt 文件。
總的來說,就是 JSON 本身含有雙引號或者其他需要轉義的字符就會出現這種情況;
