// Groovy Version: 2.4.5 JVM: 1.8.0_77 Vendor: Oracle Corporation OS: Mac OS X
@Grab('com.fasterxml.jackson.core:jackson-core:2.8.5')
@Grab('com.fasterxml.jackson.datatype:jackson-datatype-joda:2.8.5')
@Grab('joda-time:joda-time:2.9.6')
import com.fasterxml.jackson.databind.ObjectMapper
import com.fasterxml.jackson.databind.util.ISO8601DateFormat
import com.fasterxml.jackson.datatype.joda.JodaModule
import org.joda.time.DateTime
def now = new DateTime()
def bean = new Bean(date1: now.toDate(), date2: now)
def objectMapper = new ObjectMapper()
.registerModule(new JodaModule())
.setDateFormat(new ISO8601DateFormat())
def json = objectMapper.writeValueAsString(bean)
println json
class Bean {
Date date1
DateTime date2
}
結果
{
"date1": "2016-12-23T06:33:01Z",
"date2": "2016-12-23T06:33:01.045Z"
}
java.util.Date
であるdate1
の方はミリ秒は付いていない。
ちゃんと @com.fasterxml.jackson.annotation.JsonFormat
で整形する必要がありそう。
おまけ
def objectMapper = new ObjectMapper()
.registerModule(new JodaModule())
// .setDateFormat(new ISO8601DateFormat())
.configure(SerializationFeature.WRITE_DATES_AS_TIMESTAMPS, false)
上のような状態で試すとdate1
にもミリ秒が付く。タイムゾーン指定子もZ
じゃなくて+0000
に変わっちゃってるけど。。
{
"date1": "2016-12-23T06:38:26.270+0000",
"date2": "2016-12-23T06:38:26.270Z"
}