0

ドメインクラスをgrailsに保存しようとすると、次のエラーが発生します。

メソッドのシグネチャなし:java.lang.String.save()は引数タイプに適用できません:()値:[]可能な解決策:size()、size()、take(int)、wait()、any()、 wait(long)。スタックトレースは次のとおりです。

XML文字列をドメインオブジェクトに分解するサービスがあります。次に、ドメインを保存しようとすると、そのエラーが発生します。デバッグしたところ、すべてのデータが有効であることがわかりました。これが私のコードです:

   def newProfile="";

      newProfile = new LinkedinProfile(
        firstName               :   "${linkedinProfileFeed.'first-name'}",
        lastName                :   "${linkedinProfileFeed.'last-name'}",
        dobYear                 :   "${linkedinProfileFeed.'date-of-birth'.'year'}",
        dobMonth                :   "${linkedinProfileFeed.'date-of-birth'.'month'}",
        dobDay                  :   "${linkedinProfileFeed.'date-of-birth'.'day'}"  ,   
        imgUrl                  :   "${linkedinProfileFeed.'picture-url'}", 
        siteStandardAddress     :   "${linkedinProfileFeed.'site-standard-profile-request'}",           
        oAuthToken              :   accessTokenKey.toString(),
        secretKey               :   accessTokenSecret.toString()
       )
      .id="${linkedinProfileFeed.id}".toString()

      log.debug("${linkedinProfileFeed.id}".toString())
      log.debug("${linkedinProfileFeed.'first-name'}")
      log.debug("${linkedinProfileFeed.'last-name'}")
      log.debug("${linkedinProfileFeed.'date-of-birth'.'year'}")
      log.debug("${linkedinProfileFeed.'date-of-birth'.'month'}")
      log.debug("${linkedinProfileFeed.'date-of-birth'.'day'}")
      log.debug("${linkedinProfileFeed.'picture-url'}")
      log.debug("${linkedinProfileFeed.'site-standard-profile-request'}")
      log.debug(accessTokenKey.toString())
      log.debug(accessTokenSecret.toString())
      log.debug("end debug")





      newProfile.save();

また、grailsとspringsourceに精通していませんが、.Netでは、ドット演算子を使用してオブジェクトのプロパティにアクセスできます。たとえば、上記のようなオブジェクトがある場合は、newProfileと入力するだけです。そして、すべてのプロパティにアクセスできます。グレイルでは、これは起こりません。これは設計によるものですか、それともコードのエラーですか?

以下は私のドメインクラスでもあります。

   class LinkedinProfile {
String firstName
String lastName
String dobYear
String dobMonth
String dobDay
String oAuthToken
String secretKey
String id
String imgUrl
String siteStandardAddress
Date dateCreated
Date lastUpdated
long version

static hasMany = [
    linkedinLocation        : LinkedinLocation,
    linkedinSkill           : LinkedinSkill
]

static mapping = {
    cache true
    id generator: 'assigned'

    columns {
        firstName           type:'text'
        lastName            type:'text'         
        oAuthToken          type:'text'
        secretKey           type:'text'         
        dobYear             type:'text'
        dobMonth            type:'text'
        dobDay              type:'text'
        imgUrl              type:'text'
        siteStandardAddress type:'text'
    }


}
static constraints = {
    firstName           (nullable:true)
    lastName            (nullable:true)     
    oAuthToken          (nullable:false)
    secretKey           (nullable:false)
    dobYear             (nullable:true)
    dobMonth            (nullable:true)
    dobDay              (nullable:true)     
    id                  (nullable:false)
    imgUrl              (nullable:true)
    siteStandardAddress (nullable:true)
}


def beforeInsert = {
//to do:  before insert, capture current email that is stored in the db
}

def afterInsert={
    //resave email
}

}

4

1 に答える 1

2

このエラーは、文字列を呼び出しsave()ていることを示しています。調査すると、あなたがそうであることがわかります。これは、割り当てているためです。

 newProfile = new LinkedinProfile().id="${linkedinProfileFeed.id}".toString()

そのため、 newProfile は実際には StringlinkedinProfileFeed.idであり、予想される a ではありnew LinkedinProfile()ません。

比較

groovy> def foo = new Post().id="1" 
groovy> foo.class 

Result: class java.lang.String

groovy> def foo = new Post(id: "1") 
groovy> foo.class 

Result: class test.Post

idおそらく、コンストラクターの引数に入れたいと思うでしょう。とにかく、インスタンスnewProfileとして終了する必要があります。LinkedinProfileその後、それを呼び出すことができますsave()

また、Groovy ではドット演算子を使用できます。

于 2012-09-22T17:16:44.847 に答える