我有一个grails服务器,它接收一个具有NSDate的JSON请求。我收到的日期格式如下:
2012-01-23 04:47:27 +0000
我需要将其转换为JAVA数据格式才能存储。我正在做以下转换:
SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss Z");
Date date = (Date)formatter.parse(request.JSON.StartDate);
格式化日期如下:Sun Jan 22 20:47:27 PST 2012
当我尝试执行save()时,出现以下错误:
org.springframework.validation.BeanPropertyBindingResult:1个错误
字段'StartDate'中对象'com.test.date'中的字段错误:被拒绝 价值[太阳1月22日20:47:27太平洋标准时间2012];代码 [typeMismatch.com.test.date.eventStartDate,typeMismatch.StartDate,typeMismatch.java.util.Date,typeMismatch]; 参数 [org.springframework.context.support.DefaultMessageSourceResolvable: 代码[com.test.date.StartDate,StartDate];参数[];默认 消息[StartDate]];默认消息[无法转换属性 类型'java.lang.String'的值为必需类型'java.util.Date' 物业'StartDate';嵌套异常是 java.lang.IllegalStateException:无法转换类型的值 [java.lang.String]为属性所需的类型[java.util.Date] 'StartDate':找不到匹配的编辑器或转换策略]
任何人都可以告诉我这有什么问题,我需要了解什么?
编辑:
即使我执行以下操作,我实际上也会收到错误:
object.date = new Date()
object.save()
这不是因为格式化!! 谢谢!
答案 0 :(得分:1)
我不认为你的代码编译如图所示,但无论如何看起来你正在格式化一个日期,然后立即存储(并最终试图保存)它的String表示。只需删除对String的额外不必要的转换:
SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss Z");
Date date = formatter.parse(request.JSON.StartDate);
答案 1 :(得分:0)
难以置信!!!!我在这个问题上挣扎了两天,结果发现我使用的Grails域类属性名是问题。我之前使用的是“eventStartDate”,当我将其更改为“DOB”时,它开始完美运行。
我对Grails很新,并且对命名限制不太确定,但我学到了一个很好的教训,不要忽略允许的命名;)