我是 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 文件以及我必须在哪个文件中放置什么样的配置。如果有人能指出我正确的方向会很酷。