前后台JSON传值得一个问题和异常处理net.sf.json.JSONException: Unquotted string '"name"'...
发布日期:2021-10-23 14:13:24 浏览次数:6 分类:技术文章

本文共 4939 字,大约阅读时间需要 16 分钟。

  项目中做导入的时候遇到个bug,用JSON.stringify()序列号json对象传给后台;然后后台通过getPatameter()获取值时,前台的英文引号变成了中文引号。

  原来代码如下:(自己排查发现就算是英文的时候也是如此)

//提交事件    $("#submitButton").bind("click",function(){        if($("#addForm").valid()){            var jsonStr = {};            $("#itemTable").find("input[lang='userAdd']").each(function(index,obj){                var nameAttr = $(obj).attr("id").trim();                var valueAttr = $('#'+nameAttr).combobox('getValue').trim();                if (valueAttr != "" && valueAttr != undefined) {                    jsonStr[valueAttr] = nameAttr;                }            });            var json = new Object();            json.name = "ss";            json.age = "12";            var data = JSON.stringify(json);            var att = {};            att["password"] = $("#text_pwd").val();            att["organization"] = $("#text_organization").combotree("getValue");                        $(this).attr("disabled","disabled");            Loading(true,"
");//遮罩提示 $.doAjax({ url:'${basePath}/user/userAction_userAdd.do', data:{
"data":data,"arrdata":JSON.stringify(att)}, async:true, success:function(responseText){

  在后台获取时,前台的英文引号,在后台变成了中文引号,导致JSON解析出错,报异常:net.sf.json.JSONException: Unquotted string '”ss”'

/**     * 映射字段     */    public void userAdd(){        log.info("用户批量导入_PBEG");        this.msg=RESULT_FAIL;        long startTime = System.currentTimeMillis();//获取当前时间        String initPassword = "";        File file = null;        List
list = new ArrayList
(); List
userCaches = new ArrayList
(); List
failedFailName = new ArrayList
(); Organization default_org = null; try { String data = getRequest().getParameter("data"); String arrdata =getRequest().getParameter("arrdata"); JSONObject jsonData = JSONObject.fromObject(data); JSONObject jsonArrdata = JSONObject.fromObject(arrdata); String arrPassword = jsonArrdata.containsKey("password") ? jsonArrdata.getString("password") : ""; String arrOrganization = jsonArrdata.containsKey("organization") ? jsonArrdata.getString("organization") : "";

 

解决方案:

  经过几次json转换的尝试,发现结果均是如此,所以最后决定采用注入的方式处理。

//提交事件    $("#submitButton").bind("click",function(){        if($("#addForm").valid()){            var jsonStr = {};            $("#itemTable").find("input[lang='userAdd']").each(function(index,obj){                var nameAttr = $(obj).attr("id").trim();                var valueAttr = $('#'+nameAttr).combobox('getValue').trim();                if (valueAttr != "" && valueAttr != undefined) {                    jsonStr[valueAttr] = nameAttr;                }            });            var data = JSON.stringify(jsonStr);            var att = {};            att["password"] = $("#text_pwd").val();            att["organization"] = $("#text_organization").combotree("getValue");                        $(this).attr("disabled","disabled");            Loading(true,"
");//遮罩提示 $.doAjax({ url:'${basePath}/user/userAction_userAdd.do', data:{
"data":data,"arrdata":JSON.stringify(att)}, async:true, success:function(responseText){

  后台:采用注入方式

  private String data;    public String getData() {        return data;    }    public void setData(String data) {        this.data = data;    }        private String arrdata;    public String getArrdata() {        return arrdata;    }    public void setArrdata(String arrdata) {        this.arrdata = arrdata;    }    /**     * 映射字段     */    public void userAdd(){        log.info("用户批量导入_PBEG");        this.msg=RESULT_FAIL;        long startTime = System.currentTimeMillis();//获取当前时间        String initPassword = "";        File file = null;        List
list = new ArrayList
(); List
userCaches = new ArrayList
(); List
failedFailName = new ArrayList
(); Organization default_org = null; try { //String data = getRequest().getParameter("data"); //String arrdata =getRequest().getParameter("arrdata"); JSONObject jsonData = JSONObject.fromObject(data); JSONObject jsonArrdata = JSONObject.fromObject(arrdata); String arrPassword = jsonArrdata.containsKey("password") ? jsonArrdata.getString("password") : ""; String arrOrganization = jsonArrdata.containsKey("organization") ? jsonArrdata.getString("organization") : ""; String excelPath = getServletContext().getRealPath(USEREXCELTEMPLATE_DOWNLOADPATH+USEREXCELTEMPLATE_FILE); file = new File(excelPath); if(!file.exists() && !file.isDirectory()){ this.msg = "readErr"; throw new IllegalStateException("用户批量导入-->用户导入临时文件不存在!"); } List
userExports = new ArrayList
();

 

转载于:https://www.cnblogs.com/goloving/p/8027603.html

转载地址:https://blog.csdn.net/weixin_30588827/article/details/98982843 如侵犯您的版权,请留言回复原文章的地址,我们会给您删除此文章,给您带来不便请您谅解!

上一篇:git
下一篇:TACACS+/RADIUS服务器搭建记录

发表评论

最新留言

路过按个爪印,很不错,赞一个!
[***.219.124.196]2024年04月02日 13时07分41秒