使用Grails 2.4创建RESTlike API我必须解析JSON内容,例如对于UPDATE / PATCH动词。
我希望将null和空字符串值解析为null,但我看到的行为是当我发送"{'name':'p1', 'description':''}"
时,它被解析为[description:, name:p1]
,它不是空值,因为它不是能够处理paramsMap.getAt("description") != null
条件
你见过这种行为吗? ...是否可以使默认的编组器将值转换为空?
答案 0 :(得分:1)
正如文档解释:
对于没有值的输入字段,表单提交产生的Web请求将包含空字符串,而不是空字符串。将mass属性绑定到不可为空的属性时,请记住这一点。默认行为是空字符串不会为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
如果是,那就是问题。
我尝试使用空参数发布一些数据,结果为null。
然而,如果你这样做,那么groovy有很多副作用,实际上就是你写的:
print params.description != null ? 'Not null' : 'Null'
你得到'非空'
但如果你写:
params.description ? 'Not null' : 'Null'
你得到'Null'
这是我在groovy shell中制作的截图
所以最后不要使用!= null:D