`
storm0912
  • 浏览: 34059 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
社区版块
存档分类
最新评论

JSONValidationInterceptor的一个bug, 返回的json数据竟然被注释了

阅读更多

/* { "fieldErrors": {"password":["密码长度为3-20字符"]}} */

上面就是校验出错时JSONValidationInterceptor返回给我的结果,竟然被/* {} */包围。

这样产生的问题是:使用JQuery这样的ajax框架时,如果设置了返回数据类型dataType=json,  jQuery会自动解析返回的字符串成为json对象,倒霉的是,非良构的json字串会被jQuery忽略掉,从而导致回调方法永远不会被执行。

查看源码发现问题在buildResponse方法中:

protected String buildResponse(ValidationAware validationAware) {
        //should we use FreeMarker here?
        StringBuilder sb = new StringBuilder();
        sb.append("/* { ");

        if (validationAware.hasErrors()) {
            //action errors
            if (validationAware.hasActionErrors()) {
                sb.append("\"errors\":");
                sb.append(buildArray(validationAware.getActionErrors()));
            }

            //field errors
            if (validationAware.hasFieldErrors()) {
                if (validationAware.hasActionErrors())
                    sb.append(",");
                sb.append("\"fieldErrors\": {");
                Map<String, List<String>> fieldErrors = validationAware
                    .getFieldErrors();
                for (Map.Entry<String, List<String>> fieldError : fieldErrors
                    .entrySet()) {
                    sb.append("\"");
                    //if it is model driven, remove "model." see WW-2721
                    sb.append(validationAware instanceof ModelDriven ? fieldError.getKey().substring(6)
                            : fieldError.getKey());
                    sb.append("\":");
                    sb.append(buildArray(fieldError.getValue()));
                    sb.append(",");
                }
                //remove trailing comma, IE creates an empty object, duh
                sb.deleteCharAt(sb.length() - 1);
                sb.append("}");
            }
        }

        sb.append("} */");
        /*response should be something like:
         * {
         *      "errors": ["this", "that"],
         *      "fieldErrors": {
         *            field1: "this",
         *            field2: "that"
         *      }
         * }
         */
        return sb.toString();
    }

 请看

sb.append("/* { ");

sb.append("} */");

这确实是个bug,倒不是开发人员故意而为之,在struts2.2.2会被fix掉。

http://struts.1045723.n5.nabble.com/jira-Created-WW-3545-JSONValidationInterceptor-Returns-Invalid-quot-true-quot-json-Do-not-put-javascn-td3550970.html

如果你只能用2.2.2以前的版本,那就重新自定义这个interceptor,把上面的代码改为

 

sb.append(" { ");

sb.append(" } ");

即可。

分享到:
评论

相关推荐

    json复杂数据解析demo

    2. **加载JSON字符串**:获取到JSON数据后,第一步通常是将其转换为一个可操作的对象。在Python中,这可以通过`json.loads()`函数实现,将JSON字符串转化为Python字典或列表。在Java和JavaScript中,对应的函数分别...

    读取一个文件中的多个json数据

    读取一个文件中的多个json数据,可能还存在一些bug.为什么要超过50个字!看不起我的概括能力吗?

    Spring MVC返回JSON数据 用到的jar包

    在早期的1.9.x版本中,这些模块被整合在一个`jackson-all`的JAR包里。随着版本的更新,Jackson库逐渐将各个模块分开,以便更好地管理和优化。 2. **使用Jackson处理JSON**: - **序列化**:将Java对象转换为JSON...

    Json.net Json数据转换的利器

    总的来说,Json.NET是一个强大且易用的工具,它使得.NET开发人员在处理JSON数据时能够更加高效和便捷,无论是从JSON到.NET对象,还是从.NET对象到JSON,Json.NET都提供了丰富的功能和高度的灵活性。对于任何涉及JSON...

    一些好玩的注释~ “佛祖保佑 永无bug”

    一些好玩的注释~ “佛祖保佑 永无bug” 神兽 美女注释等

    jsoneditor_javascript_JSON_jsoneditor9.1.4_json-editorjs_

    JSONEditor9.1.4是该工具的一个特定版本,可能包含了性能优化、新功能或bug修复。 JSON(JavaScript Object Notation)是一种轻量级的数据交换格式,易于人阅读和编写,同时也易于机器解析和生成。在Web开发中,...

    android在线版本更新源代码(update,json解析带注释)

    本文将深入探讨如何实现一个基于JSON解析的在线版本更新系统,并结合提供的代码资源进行详细讲解。 首先,让我们理解一下标题和描述中的核心知识点: 1. **在线版本更新**:这是指应用程序能够检查服务器上是否...

    jsonhandle,谷歌浏览器json插件

    在使用JSON-handle时,用户可以直接在浏览器中打开包含JSON数据的网页,插件会自动检测并提供一个直观的界面来展示JSON数据。这包括但不限于将嵌套的JSON对象和数组以树状结构显示,便于理解和浏览。用户可以通过...

    谷歌浏览器json插件,Json-Handle插件下载安装使用

    在开发过程中,查看和处理JSON数据时,有一个好的工具能够极大地提高效率。谷歌浏览器中的Json-Handle插件就是这样一款实用工具,它专门设计用来方便开发者在浏览器中解析、编辑和格式化JSON数据。 Json-Handle插件...

    JsonView 查看Json的小工具

    8. **便捷操作**:只需在浏览器中打开一个包含Json数据的网页,JsonView就会自动识别并呈现数据,无需额外安装软件或进行复杂配置。 在使用JsonView时,有几点需要注意: 1. **安全考虑**:由于JsonView可以直接...

    JSON Viewer(JSON格式化查看器)

    JSON Viewer是一款用于格式化查看JSON数据的工具,它使得复杂的JSON结构变得更加清晰易读,尤其在处理大量或深度嵌套的数据时,这类工具显得尤为重要。JSON(JavaScript Object Notation)是一种轻量级的数据交换...

    Jquery easy ui Tree组件使用(tree11.json当数据源有bug)

    `tree11.json`文件就是这样的数据源,包含一系列的对象,每个对象代表树的一个节点,通常包含`id`(唯一标识符)、`text`(节点文本)和`children`(子节点数组)等属性。例如: ```json [ { "id": "1", "text":...

    仿百度,谷歌输入框自动提示功能---JSON版,修复上一版的一个BUG

    描述中提到的“修复上一版的一个BUG”,意味着这个版本是对之前版本的改进,修复了已知的问题,可能是在数据处理、性能优化或用户交互方面存在不足,开发者进行了相应的调试和修复,使得新版本更稳定、更可靠。...

    Python-jsn一个绝对简单和简洁的CLI应用程序来操纵JSON数据

    **Python-jsn:简化JSON数据操作...总结,jsn是Python开发者处理JSON数据时的一个强大工具,它利用命令行的强大功能,使得JSON操作变得简单、快捷。无论是在日常开发还是自动化脚本中,jsn都能提供高效的数据处理能力。

    json-c0.13.1Release.rar

    JSON-C是C语言实现的一个JSON库,它提供了一系列API,使得开发者能够方便地在C程序中处理JSON数据。这个压缩包“json-c0.13.1Release.rar”包含的是json-c库的0.13.1版本,专为Visual Studio 2012(VS 2012)编译...

    org.json.jar三个最新版本

    4. **JSONTokener**:用于解析JSON文本,通过`next()`方法逐个读取字符,`back()`返回前一个字符,`hasMoreCharacters()`检查是否还有更多字符,`nextValue()`解析下一个JSON值。 关于提供的三个版本: - **json-...

    JSON编辑器JSONedit.zip

    9. **支持JSON Schema**:JSONedit还可能支持JSON Schema,这是一个JSON格式的规范,用于定义JSON数据的结构和限制,帮助验证JSON数据的正确性。 10. **跨平台**:作为exe文件,JSONedit可能适用于Windows操作系统...

    分享json源码

    JSON(JavaScript Object Notation)是一种轻量级的数据交换格式,它基于JavaScript的一个子集,设计简单且易于人阅读和编写,同时也易于机器解析和生成。JSON格式被广泛应用于Web服务和应用程序之间的数据交换,...

    网页版JSON格式化工具

    JSON(JavaScript Object Notation)是一种轻量级的数据交换格式,被广泛用于Web服务和应用程序之间的数据传输。它基于JavaScript语法,但比XML更加简洁、易读。网页版JSON格式化工具是专门用来处理和查看JSON数据的...

    json-c-0.12.1.tar.gz

    JSON-C是一个C语言实现的JSON库,专为那些需要在C环境中处理JSON数据的应用程序设计。`json-c-0.12.1.tar.gz`是这个库的一个特定版本,0.12.1,以.tar.gz压缩格式提供,这是在Linux和类Unix系统中常见的源码包打包...

Global site tag (gtag.js) - Google Analytics