更新: クラスなどに関するいくつかの間違った仮定を作成しました。「デモ」プロジェクトがある場合、次のことが発生します。
「Company」という名前の 2 つのクラスがあります。
- 1 つは grails-app/domain/my.classes.domain.Company に配置されます
- もう 1 つは src/groovy/my.clazz.Company にあります。
最後のものには @Validateable アノテーションがあり、Config.groovy には grails.validateable.packages = ['my.clazz'] が含まれています
また、grails-app/domain/my.classes.domain.Account に Account クラスがあります。
package my.classes.domain
import java.io.Serializable;
class Account implements Serializable { Company company }
次に、次のコードを (bootstrap.groovy で) 使用します。
import my.classes.domain.Company
import my.classes.domain.Account
...
Company company = new Company
Account acccount = new Account(company: company)
このアプリを実行すると、次のエラーが表示されます。
原因: org.springframework.beans.ConversionNotSupportedException: タイプ [my.clazz.Company] の値をプロパティ 'company' の必要なタイプ [my.classes.domain.Company] に変換できません: 一致するエディターまたは変換戦略が見つかりません ... 33 以上 原因: java.lang.IllegalStateException: プロパティ 'company' のタイプ [my.clazz.Company] の値を必要なタイプ [my.classes.domain.Company] に変換できません: 一致するエディターまたは変換戦略が見つかりません
すべてがうまくいっているように見えるので、これは非常に奇妙な例外です。一部のテストでは、次の「ヒント」が証明されました。 config.groovy を変更してクラスに明示的に名前を付ける (つまり、grails.validateable.classes = ['my.classes.domain.Company'] を使用する) と、このエラーは発生しません。このエラーアカウントの会社のプロパティを別の名前に変更した場合 (およびそれに応じてブートストラップを変更した場合) は発生しません。
class Account extends Serializable {
Company cmp
}
ただし、これらは回避策です。なぜこれが起こっているのか、私は本当に興味があります。誰か手がかりを得ましたか?
安全のために、この問題を作成するために次のことを行いました。
- ドメイン クラスを作成します: my.classes.domain.Company
- ドメインクラスを作成します: my.classes.domain.Account
- 上記のようにドメインクラスを変更します
- グルーヴィーなクラスを作成します: my.clazz.Company
- このグルーヴィーなクラスに Validatable アノテーションを付与してください。
- my.clazz パッケージを検証可能なパッケージに追加します
- ブートストラップで、新しいアカウント (会社:会社) で新しいアカウントを作成します。