1

私はGrailsを初めて使用し、UUID型のIDを持つモデルを永続化しようとしました。ObjectIdがあることは知っていますが、今のところUUIDを保持します。

class Book {
  UUID id
  String title
}

スキャフォールディングを有効にしたBookControllerがあります。コントローラをロードして新しい本を追加しようとすると、Grailsから次のエラーメッセージが表示されます。

エラー500:内部サーバーエラー
URI / GrailsTest / book / save
クラスorg.springframework.core.convert.ConverterNotFoundException
メッセージタイプjava.lang.Stringからタイプjava.util.UUIDに変換できるコンバータが見つかりません
grailsの24行目あたり-app/controllers / ch / teamrg / test / BookController.groovy
PageFragmentCachingFilter.javaの186行目あたり
183:if(method == null){
184:log.debug( "{}:{} {}のキャッシュ可能なメソッドが見つかりません"、
185:new Object [] {request.getMethod()、request.getRequestURI()、getContext()});
186:chain.doFilter(request、response);
187:戻る;
188:}
189:コレクションcacheOperations = cacheOperationSource.getCacheOperations(
AbstractFilter.javaの63行目あたり
60:試してみてください{
61://二重gzipを回避するためにRequestDispatcher転送に設定されたNO_FILTER
62:if(filterNotDisabled(request)){
63:doFilter(リクエスト、レスポンス、チェーン);
64:}
65:else {
66:chain.doFilter(req、res);
痕跡
   ライン| 方法
->> 18 | org.grails.datastore.mapping.model.types.conversion.DefaultConversionServiceで変換します
---- ---- ---- ---- ---- ---- ---- ---- ---- ---- ---- ---- ---- ---- ---- ---- ---- ---- ---- ---- ---- ---- ---- ---- ---- ---- ---- ---- ---- ---- ---- ---- ---- ---- ---- ---- ---- ---- ---- ---- ---- ----
| 365 | org.grails.datastore.mapping.engine.NativeEntryEntityPersisterのcacheNativeEntry
| 725 | persistEntity。の ''
| 125 | org.grails.datastore.mapping.engine.EntityPersisterに永続化する
| 479 | 持続します。。。。org.grails.datastore.mapping.core.AbstractSessionで
| 166 | org.grails.datastore.gorm.GormInstanceApiのdoSave
| 143 | doCall。。。。。org.grails.datastore.gorm.GormInstanceApi$_save_closure4にあります
| 301 | org.grails.datastore.mapping.core.DatastoreUtilsで実行します
| 34 | 実行する 。。。。org.grails.datastore.gorm.AbstractDatastoreApiで
| 142 | org.grails.datastore.gorm.GormInstanceApiに保存します
| 258 | 電話 。。。。。。org.grails.datastore.gorm.InstanceMethodInvokingClosureで
| 24 | BookController.groovyに保存
| 186 | doFilter。。。。PageFragmentCachingFilter.javaで
| 63 | AbstractFilter.javaのdoFilter
| 886 | runTask。。。。java.util.concurrent.ThreadPoolExecutor$Workerで
| 908 | で実行''
^ 680 | 走る 。。。。。。java.lang.Threadで

org.grails.datastore.mapping.engine.NativeEntryEntityPersisterにブレークポイントを設定しました。アプリケーションがそこに到達したら、org.grails.datastore.mapping.model.types.conversion.DefaultConversionServiceのインスタンスを返すgetMappingContext()。getConversionService()部分を解決できます。このインスタンスには、ObjectIdおよびBinaryのコンバーターを含む10個のコンバーターが構成されています。文字列とUUIDの間で変換できるように、独自のコンバーターをどこで構成できるかを今自問しています。

Grailsを初めて使用するため、必要なJavaファイルをどこに配置するか、どのファイルにどのような構成を配置する必要があるかがわかりません。誰かが私を正しい方向に向けることができればクールだろう。

4

1 に答える 1

0

カスタム ユーザー タイプのドキュメントにセッションがあります。

AbstractMappingAwareCustomTypeMarshallerそのため、拡張して登録する型クラスを作成する必要がありますSpring Bean(ドキュメントの最後を参照)。

于 2013-02-22T18:42:40.140 に答える