json - 带有JSON参数的Grails域构造函数不起作用

标签 json grails groovy

我的grails项目中有这样的 Controller :

def submit() {
    def json = request.JSON
    Share share = new Share(json)
    share.save(flush: true,  failOnError: true)
}

类共享看起来像这样:
class Share {

    String timestamp
    String deviceName
    String originMessage

Share(JSONObject originalMessage) {
    println "Run JSON constructor"
    println "$originalMessage"

    originMessage = originalMessage.toString()
    timestamp = originalMessage.timestamp
    deviceName = originalMessage.device
}

它接收JSON请求并尝试保留在数据库中。

我在failOnError的控制台中收到这样的错误:
  • 字段'deviceName'上的对象'com.entity.Share'中的字段错误:拒绝的值[null];
  • 字段'originMessage'上的对象'com.entity.Share'中的字段错误:拒绝的值[null];代码

  • 很多方法都找到了一种可能的方法:在 Controller 中,将JSON转换为字符串,然后将其传递到参数为String类型的构造函数中,然后使用JSON转换器将其解析回JSON。但是为什么我不能正确地将JSON对象作为参数传递。怎么了?

    最佳答案

    在声明此构造函数方面,我没有多大意义,因为域类已经具有使用Map参数的隐式构造函数。您可以使用JSONObject调用此构造函数,因为此类实现了Map,例如

    class Share {
    
        String timestamp
        String deviceName
        String originMessage
    }
    
    def json = request.JSON
    Share share = new Share(json)
    

    这些错误的原因
    Field error in object 'com.entity.Share' on field 'deviceName': rejected value [null];
    Field error in object 'com.entity.Share' on field 'originMessage': rejected value [null]; codes
    

    是您的JSONObject实例没有名为deviceNameoriginMessage的非null属性。

    您需要弄清楚为什么缺少这些属性,或者通过向域类中添加以下约束来允许这些属性为空
    class Share {
    
        String timestamp
        String deviceName
        String originMessage
    
        static constraints = {
            deviceName nullable: true
            originMessage nullable: true 
        }
    }
    

    关于json - 带有JSON参数的Grails域构造函数不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21100478/

    相关文章:

    Grails Controller - 动态方法文档

    grails - 默认 Grails '/' Controller 映射无法正确解析

    design-patterns - 这种带有闭包的模式有名字吗?

    .net - TypeConverter 适用于 Newtonsoft.Json,但不适用于 JsonConverter? (F#)

    javascript - 使用 Javascript DOM 在 Header 中附加元素并将其作为 Angular JS 中所有网页共享的通用 header

    java - 将一个 Json 与另一个 Json 组合(JAVA)

    java - groovy grails异步 promise 立即执行

    grails - 当部署为War Tomcat 6时,Spring Security Grails插件失败

    jenkins - 如何使用 groovy 脚本在 Jenkins 管道作业中调用 Ant?

    javascript - Vue.js 和 Rails 的数据库保存问题