2016-03-04 149 views
0

我有一個Grails 3.1.2應用找不到匹配的構造函數:java.time.LocalDateTime(java.lang.String中)

我的一個領域類是目標

import java.time.LocalDateTime 
import java.time.temporal.ChronoUnit 

class Goal { 
    String name 
    String description 
    LocalDateTime targetDate 
    Date dateCreated 
    Date lastUpdated 
    static constraints = { 
     name(nullable: false, blank: false) 
    } 
} 

當我打電話確認我的目標的情況下,我得到:在對象

  • 現場錯誤「com.liftyourgame.model.Goal」現場「targetDate」:拒絕值2016-01-28T15:10:3​​9.000Z] ;代碼[com.liftyourgame.model.Goal.targetDate.typeMismatch.error,com.liftyourgame.model.Goal.targetDate.typeMismatch,goal.targetDate.typeMismatch.error,goal.targetDate.typeMismatch,typeMismatch.com.liftyourgame.model。 Goal.targetDate,typeMismatch.targetDate,typeMismatch.java.time.LocalDateTime,typeMismatch];參數[targetDate];默認消息[找不到匹配的構造函數:java.time.LocalDateTime(java.lang.String中)

如何更改驗證,因此不需要這個構造?

+0

的可能的複製http://stackoverflow.com/questions/35507996/grails-mapping-local-time-of-java-8-domain-objects-to-gorm – Andreas

+1

嗨Andreas,這不是真的重複。 我使用的是從org.hibernate作爲映射:休眠-java8:5.1.0.Final 的休眠模式驗證傳遞啓動映射LocalDateTime領域到MySQL DateTime字段類型 –

+0

@Andreas此處描述的問題並沒有真正涉及Hibernate或持久性。該問題與默認數據聯編程序有關。 –

回答

2

如何更改驗證,以便它不需要此構造函數?

你不能,但驗證不是真正的問題。數據綁定是問題。默認聯編程序尚不支持LocalDateTime

你可以這樣註冊自己的轉換器:

轉換器:

// src/main/groovy/demo/MyDateTimeConverter.groovy 
package demo 

import grails.databinding.converters.ValueConverter 

import java.time.LocalDateTime 
import java.time.format.DateTimeFormatter 

class MyDateTimeConverter implements ValueConverter { 
    @Override 
    boolean canConvert(Object value) { 
     value instanceof String 
    } 

    @Override 
    Object convert(Object value) { 
     def fmt = DateTimeFormatter.ofPattern("yyyy-MM-dd'T'HH:mm:ss.SSS'Z'") 
     LocalDateTime.parse(value, fmt) 
    } 

    @Override 
    Class<?> getTargetType() { 
     LocalDateTime 
    } 
} 

註冊它作爲一個bean:

// grails-app/conf/spring/resources.groovy 
beans = { 
    myConverter demo.MyDateTimeConverter 
} 
+0

當然你不必像這個例子那樣硬編碼格式。我保持這種簡單,以顯示機制如何工作。如果你只需要1格式,那麼我在那裏顯示的就會很好。 –

+0

我認爲這種情況下的格式化程序是線程安全的,不像'SimpleDateFormat'。因此,每次調用「convert」時都不必創建一個新的。你可以初始化它作爲一個類中的一個屬性並重新使用它。 –

相關問題