2016-07-14 57 views
0

我试图使用Grails的2.5.5创建一个REST的服务具有日期属性,如下所示:Grails的REST客户端转换字符串java.util.Date

import grails.rest.* 

@Resource(uri='/restDomain', readOnly=true) 
class RestDomain { 
    Date myDate 
} 

但从另一个调用时Grails的应用程序(V2.5.5或v3.1.9)是这样的:

new RestBuilder().get('http://localhost:8080/restApp/restDomain.json').json.collect { 
    new RestDomain(it) 
} 

我得到Cannot cast object '2016-01-20T12:36:57Z' with class 'java.lang.String' to class 'java.util.Date'错误。

我已经加入这application.yml(Grails的v3.1.9)在文件

--- 
grails: 
    databinding: 
     dateFormats: 
      - yyyy-MM-dd'T'HH:mm:ssX 
      - yyyy-MM-dd'T'HH:mm:ss.SSSX 

的最底部,这Config.groovy中(Grails的V2.5.5)

grails.databinding.dateFormats = ["yyyy-MM-dd'T'HH:mm:ssX", "yyyy-MM-dd'T'HH:mm:ss.SSSX"] 

但似乎并没有在所有

注意工作:在这两个客户端应用程序我都对应src/groovy/restApp/RestDomain.groovy类,如下所示:

package restApp 

class RestDomain { 
    Date myDate 
} 

注2:Grails的3.1.9客户端应用程序具有compile 'org.grails:grails-datastore-rest-client:6.0.0.M1'依赖性中的build.gradle依赖关系部分,和Grails的2.5.5客户端应用程序已在BuildConfig.groovy compile ':rest-client-builder:2.1.1'插件部分

任何帮助越来越它在Grails 2.5.x或Grails 3.1.x应用程序中工作将非常感谢

回答

0

日期字符串末尾的'Z'表示时区是UTC,它不是您可以使用的有效的ISO 8601 time zone specification用你的时间格式解析'X'。它应该是可解析与

yyyy-MM-dd'T'HH:mm:ss'Z' 
+0

我已经尝试与该格式,问题似乎是数据绑定根本不起作用,我会尝试使用其他一些简单的格式来验证它是'T'还是'Z' – nardhar

+0

我在类上添加了BindUsing注释,如下所示:'@ BindUsing({obj,source-> source.getPropertyValue('myDate'as Date)})'它也不起作用,事实上,我猜测''Date'转换会破坏程序 – nardhar

0

添加一个答案,提供关于我如何解决这样的解决办法文字,但我不会将其标记为接受的答案,因为它不是解决它的理想方式,所以在这里,它是:

添加这在我的客户端控制器(我猜测,bindData方法是这里的关键):

new RestBuilder().get('http://localhost:8080/restApp/restDomain.json').json.collect { 
    def restDomainInstance = new RestDomain() 
    bindData(restDomainInstance, it) 
    restDomainInstance 
} 

,改变RestDomain.groovy这个

package restApp 

import java.text.SimpleDateFormat 
import org.grails.databinding.BindUsing 

class RestDomain { 
    @BindUsing({ obj, source -> 
     new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ssX") 
      .parse(source.getPropertyValue('myDate')) 
    }) 
    Date myDate 
} 

中的SimpleDateFormat的X被用于识别时区为UTC,所以JVM将其转换为当前时区后(在我的情况:-04:00 GMT)