当前位置:首页 > 开发 > 编程语言 > Json > 正文

永远不要自己拼装json

发表于: 2012-05-24   作者:asialee   来源:转载   浏览次数:
摘要: 今天项目出现一个非常怪的现象,使用spring拦截的异常有时候显示不出来的问题,现在将原因和解决方案记录下,spring的拦截代码如下: if(accept.indexOf("application/json")>-1){ return super.getModelAndView("errors/ajax/500", ex, re

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

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


500页面的代码如下:

<%@ 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}"}


返回的错误信息如下:

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


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

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


然后用这个生成的json是下面的代码:

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


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

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}


这样就解决了这个问题,随着json的越来越普遍,虽然格式很简单,但是自己拼装的在不经意间就有问题。

永远不要自己拼装json

  • 0

    开心

    开心

  • 0

    板砖

    板砖

  • 0

    感动

    感动

  • 0

    有用

    有用

  • 0

    疑问

    疑问

  • 0

    难过

    难过

  • 0

    无聊

    无聊

  • 0

    震惊

    震惊

编辑推荐
美国的一家报纸上登了这么一则广告:“一美元购买一辆豪华轿车”。 哈利看到这则广告时半信半疑:“
美国的一家报纸上登了这么一则广告:“一美元购买一辆豪华轿车”。 哈利看到这则广告时半信半疑:“
什么是ShellShock漏洞? 继上次震惊业内的Heartbleed漏洞被曝出后,现在又一个影响广泛的ShellShock
Linux命令行佷有用、很高效,也很有趣,但有时候也很危险,尤其是在你不确定你自己在正 在做什么时
2009-09-16 @ taobao 引言 你也许已经习惯了等待在SecureCRT提交MapReduce的作业, 然后要么傻傻等待
从这些文章中可以看到,SBJSON在多数测试中都处于倒数的第一或倒数第二的位置。所以说,SBJSON实际
“我可以花一点时间整理一下这段程序吗?它太乱了。”对于这个问题的回答应该永远是“好!”。然而
写这篇文章首先不想在51CTO这一个语言,文字,思想,技术交流很和谐的圈子里引起喧哗,其次也没有针
写这篇文章首先不想在51CTO这一个语言,文字,思想,技术交流很和谐的圈子里引起喧哗,其次也没有针
JSON学习笔记 JsonResponseUtil 和JsonUtil,这两个工具类都实现接口InitializingBean! Spring的In
版权所有 IT知识库 CopyRight © 2009-2015 IT知识库 IT610.com , All Rights Reserved. 京ICP备09083238号