2016-07-14 20 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)