Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/mongodb/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Grails、GORM和MongoDB的UUID问题_Mongodb_Grails_Gorm - Fatal编程技术网

Grails、GORM和MongoDB的UUID问题

Grails、GORM和MongoDB的UUID问题,mongodb,grails,gorm,Mongodb,Grails,Gorm,我是Grails新手,我尝试用UUID类型的id持久化模型。我知道有ObjectId,但现在我想坚持UUID class Book { UUID id String title } 我有一个BookController,在那里我启用了脚手架。当我现在加载控制器并尝试添加新书时,我从Grails收到以下错误消息: Error 500: Internal Server Error URI /GrailsTest/book/save Class org.springframework.cor

我是Grails新手,我尝试用UUID类型的id持久化模型。我知道有ObjectId,但现在我想坚持UUID

class Book {
  UUID id
  String title
}
我有一个BookController,在那里我启用了脚手架。当我现在加载控制器并尝试添加新书时,我从Grails收到以下错误消息:

Error 500: Internal Server Error URI /GrailsTest/book/save Class org.springframework.core.convert.ConverterNotFoundException Message No converter found capable of converting from type java.lang.String to type java.util.UUID Around line 24 of grails-app/controllers/ch/teamrg/test/BookController.groovy Around line 186 of PageFragmentCachingFilter.java 183: if(method == null) { 184: log.debug("No cacheable method found for {}:{} {}", 185: new Object[] { request.getMethod(), request.getRequestURI(), getContext() }); 186: chain.doFilter(request, response); 187: return; 188: } 189: Collection cacheOperations = cacheOperationSource.getCacheOperations( Around line 63 of AbstractFilter.java 60: try { 61: // NO_FILTER set for RequestDispatcher forwards to avoid double gzipping 62: if (filterNotDisabled(request)) { 63: doFilter(request, response, chain); 64: } 65: else { 66: chain.doFilter(req, res); Trace Line | Method ->> 18 | convert in org.grails.datastore.mapping.model.types.conversion.DefaultConversionService - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - | 365 | cacheNativeEntry in org.grails.datastore.mapping.engine.NativeEntryEntityPersister | 725 | persistEntity . in '' | 125 | persist in org.grails.datastore.mapping.engine.EntityPersister | 479 | persist . . . . in org.grails.datastore.mapping.core.AbstractSession | 166 | doSave in org.grails.datastore.gorm.GormInstanceApi | 143 | doCall . . . . . in org.grails.datastore.gorm.GormInstanceApi$_save_closure4 | 301 | execute in org.grails.datastore.mapping.core.DatastoreUtils | 34 | execute . . . . in org.grails.datastore.gorm.AbstractDatastoreApi | 142 | save in org.grails.datastore.gorm.GormInstanceApi | 258 | call . . . . . . in org.grails.datastore.gorm.InstanceMethodInvokingClosure | 24 | save in BookController.groovy | 186 | doFilter . . . . in PageFragmentCachingFilter.java | 63 | doFilter in AbstractFilter.java | 886 | runTask . . . . in java.util.concurrent.ThreadPoolExecutor$Worker | 908 | run in '' ^ 680 | run . . . . . . in java.lang.Thread 错误500:内部服务器错误 URI/grailtest/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:if(方法==null){ 184:log.debug(“没有为{}:{}{}找到可缓存的方法”, 185:新对象[]{request.getMethod(),request.getRequestURI(),getContext()}); 186:chain.doFilter(请求、响应); 187:返回; 188: } 189:集合cacheOperations=CacheOperationsSource.getCacheOperations( 关于AbstractFilter.java的第63行 60:试试看{ 61://为RequestDispatcher转发设置了NO_筛选器,以避免双重gzip 62:if(过滤器未禁用(请求)){ 63:doFilter(请求、响应、链); 64: } 65:还有吗{ 66:chain.doFilter(请求、回复); 痕迹 直线法 ->>18 |在org.grails.datastore.mapping.model.types.conversion.DefaultConversionService中转换 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - |365 | org.grails.datastore.mapping.engine.nativeEntryEntityTyperMaster中的cacheNativeEntry |725 |在“”中 |125 |在org.grails.datastore.mapping.engine.EntityPersister中持久化 |479 |在org.grails.datastore.mapping.core.AbstractSession中持久化 |166 |存储在org.grails.datastore.gorm.GormInstanceApi中 |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.nativeEntryEntityypersister上设置了一个断点。当应用程序到达该断点时,我可以解析getMappingContext().getConversionService()返回org.grails.datastore.mapping.model.types.conversion.DefaultConversionService实例的部分。此实例配置了10个转换器,包括ObjectId和Binary的转换器。我现在问自己,我可以在哪里配置自己的转换器,以便在字符串和UUID之间进行转换


由于我是Grails新手,我不知道将所需的Java文件放在哪里,也不知道必须将什么样的配置放在哪个文件中。如果有人能给我指出正确的方向,那就太好了。

文档中有一个会话

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