永远不要自己拼装json

[size=medium][color=blue]
今天项目出现一个非常怪的现象,使用spring拦截的异常有时候显示不出来的问题,现在将原因和解决方案记录下,spring的拦截代码如下:
[/color][/size]

if(accept.indexOf("application/json")>-1){
return super.getModelAndView("errors/ajax/500", ex, request);
}

[size=medium][color=blue]
500页面的代码如下:
[/color][/size]

<%@ page language="java" contentType="application/json; charset=UTF-8" pageEncoding="UTF-8"%><%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>{"errorCode":-1,"errorMsg":"${exception.message}"}

[size=medium][color=blue]
返回的错误信息如下:
[/color][/size]

{"errorCode":"-1","errorMsg":"错误代码:-20002
错误信息:ORA-20002: 3103: 项目 CUXECSWF/10888CUXECSWF120518150833 的属性 WF_NOTE 不存在。"}

[size=medium][color=blue]
放眼望去好像没有什么问题,然后就是不调用ajax的回调函数,最后没有办法,在后端生成了下json,然后打印出来,发现了问题,后端生成json的代码如下:
[/color][/size]

Map<String,String> errors = new HashMap<String,String>();
errors.put("errorCode", "-1");
errors.put("errorMsg", ex.getMessage());
log.info(JSONObject.fromObject(errors).toString())

[size=medium][color=blue]
然后用这个生成的json是下面的代码:
[/color][/size]

{"errorCode":"-1","errorMsg":"错误代码:-20002\r
错误信息:ORA-20002: 3103: 项目 CUXECSWF/10888CUXECSWF120518150833 的属性 WF_NOTE 不存在。"}

[size=medium][color=blue]
所以之前在前端用jsp拼装的json是有问题的,最后将代码修改了下,在后端生存json后传递到前端,代码如下:
[/color][/size]

Map<String,String> errors = new HashMap<String,String>();
errors.put("errorCode", "-1");
errors.put("errorMsg", ex.getMessage());

request.setAttribute("errorJson", JSONObject.fromObject(errors).toString());
return super.getModelAndView("errors/ajax/500", ex, request);


<%@ page language="java" contentType="application/json; charset=UTF-8" pageEncoding="UTF-8"%><%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>${errorJson}

[size=medium][color=blue]
这样就解决了这个问题,随着json的越来越普遍,虽然格式很简单,但是自己拼装的在不经意间就有问题。
[/color][/size]
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值