【问题标题】:Parsing JSON empty string value with Grails 2.4使用 Grails 2.4 解析 JSON 空字符串值
【发布时间】:2014-10-16 08:37:02
【问题描述】:

使用 Grails 2.4 创建类似 REST 的 API 我必须解析 JSON 内容,例如用于 UPDATE/PATCH 动词。

我希望 null 和空字符串值都被解析为 null 但我看到的行为是当我发送 "{'name':'p1', 'description':''}"this 时被解析为[description:, name:p1]that 不是 null 值,因为它无法处理paramsMap.getAt("description") != null条件

你见过这种行为吗? ...是否可以使默认编组器将值转换为空值?

【问题讨论】:

    标签: json grails


    【解决方案1】:

    如文档所述:

    对于没有值的输入字段,表单提交产生的​​ Web 请求将具有空白字符串,而不是 null。在对不可为空的属性进行批量属性绑定时,请记住这一点。默认行为是空白字符串不会验证 nullable: false 因为数据绑定器会将空白字符串转换为 null。这包括空字符串和空字符串。空白字符串是任何字符串,因此 trim() 方法返回一个空字符串。要关闭空字符串到 null 的转换,请将 Config.groovy 中的 grails.databinding.convertEmptyStringsToNull 属性设置为 false。有关数据绑定的更多详细信息,请参阅数据绑定部分。

    所以 marshaller 的默认行为是将其转换为 null。

    检查您是否在配置中:

    // the default value for this property is true
    grails.databinding.convertEmptyStringsToNull = false
    

    如果是,那就是问题所在。

    我尝试发布一些参数为空的数据,结果为空。

    但是 groovy 有很多副作用,事实上,如果你这样做的话:

    print params.description != null ? 'Not null' : 'Null'
    

    你得到'非空'

    但是如果你写:

    params.description ? 'Not null' : 'Null'
    

    你得到'空'

    这是我在 groovy shell 中制作的屏幕截图

    所以最后不要使用 != null :D

    【讨论】:

    • 我也意识到要检查 JSONObject.NULL 而不是纯空保留字......而且行为似乎也不同。我看到这里有点乱……但也许是我
    猜你喜欢
    • 1970-01-01
    • 2018-04-13
    • 2020-07-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-09-08
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多