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-app/controllers/ch/teamrg/test/BookController.groovy 的第 24 行左右
PageFragmentCachingFilter.java 的第 186 行附近
183:如果(方法==空){
184: log.debug("No cacheable method found for {}:{} {}",
185: 新对象 [] { request.getMethod(), request.getRequestURI(), getContext() });
186:链.doFilter(请求,响应);
187:返回;
188:}
189:集合cacheOperations = cacheOperationSource.getCacheOperations(
AbstractFilter.java 的第 63 行附近
60:试试{
61: // 为 RequestDispatcher 转发设置 NO_FILTER 以避免双重 gzip
62: if (filterNotDisabled(request)) {
63:doFilter(请求,响应,链);
64:}
65:否则{
66: 链.doFilter(req, res);
痕迹
   线 | 方法
->> 18 | 在 org.grails.datastore.mapping.model.types.conversion.DefaultConversionService 中转换
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
| 365 | org.grails.datastore.mapping.engine.NativeEntryEntityPersister 中的 cacheNativeEntry
| 725 | 持久实体。在 ''
| 125 | 坚持在 org.grails.datastore.mapping.engine.EntityPersister
| 第479章 坚持。. . . 在 org.grails.datastore.mapping.core.AbstractSession
| 166 | doSave 在 org.grails.datastore.gorm.GormInstanceApi
| 143 | 呼叫。. . . . 在 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 | 过滤器。. . . 在 PageFragmentCachingFilter.java
| 63 | AbstractFilter.java 中的 doFilter
| 第886章 运行任务。. . . 在 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() 部分。此实例配置了 10 个转换器,包括 ObjectId 和 Binary 的转换器。我现在问自己,我可以在哪里配置我自己的转换器,以便我可以在 String 和 UUID 之间进行转换?

由于我是 Grails 的新手,所以我不知道在哪里放置所需的 Java 文件以及我必须在哪个文件中放置什么样的配置。如果有人能指出我正确的方向会很酷。

4

1 回答 1

0

文档中有一个 session for custom user types

因此,您需要创建扩展AbstractMappingAwareCustomTypeMarshaller并注册为 a的类型类Spring Bean(参见文档的最后部分)。

于 2013-02-22T18:42:40.140 回答