Java tutorial
/* * Copyright 2013 Nicolas Morel * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package com.github.nmorel.gwtjackson.shared.annotations; import java.sql.Timestamp; import java.util.Date; import com.fasterxml.jackson.annotation.JsonFormat; import com.fasterxml.jackson.annotation.JsonFormat.Shape; import com.fasterxml.jackson.annotation.JsonProperty; import com.github.nmorel.gwtjackson.shared.AbstractTester; import com.github.nmorel.gwtjackson.shared.ObjectMapperTester; /** * @author Nicolas Morel */ public final class JsonFormatTester extends AbstractTester { // currently, jackson does not take JsonFormat on parent into account @JsonFormat(pattern = "/yyyy/MM/dd/HH/mm/ss") public static class FormatDateBean { @JsonFormat(shape = Shape.STRING, pattern = "/yyyy/MM/dd/") public Date dateString; // we asked for a number so we should get the date in milliseconds and the pattern ignored @JsonFormat(shape = Shape.NUMBER, pattern = "/yyyy/MM/dd/") public Date dateNumber; @JsonFormat(shape = Shape.STRING, timezone = "Europe/Paris") public Date dateParis; @JsonFormat(shape = Shape.STRING, pattern = "yyyy-MM-dd HH:mm:ss.SSS Z", timezone = "America/Los_Angeles") public Date dateLosAngeles; public Date date; @JsonFormat(shape = Shape.STRING, pattern = "/yyyy/MM/dd/") public Timestamp timestampString; // we asked for a number so we should get the date in milliseconds and the pattern ignored @JsonFormat(shape = Shape.NUMBER, pattern = "/yyyy/MM/dd/") public Timestamp timestampNumber; @JsonFormat(shape = Shape.STRING, timezone = "Europe/Paris") public Date timestampParis; @JsonFormat(shape = Shape.STRING, pattern = "yyyy-MM-dd HH:mm:ss.SSS Z", timezone = "America/Los_Angeles") public Date timestampLosAngeles; public Timestamp timestamp; private final Date dateInParameter; public FormatDateBean( @JsonProperty("dateInParameter") @JsonFormat(shape = Shape.STRING, pattern = "'P'yyyy/MM/dd") Date dateParameter) { this.dateInParameter = dateParameter; } public Date getDateInParameter() { return dateInParameter; } } public static final JsonFormatTester INSTANCE = new JsonFormatTester(); private JsonFormatTester() { } public void testFormatDate(ObjectMapperTester<FormatDateBean> mapper) { long millis = getUTCTime(2013, 12, 25, 0, 0, 0, 0); Date date = new Date(millis); Timestamp timestamp = new Timestamp(millis); FormatDateBean bean = new FormatDateBean(new Date(millis)); bean.dateString = date; bean.dateNumber = date; bean.dateParis = date; bean.dateLosAngeles = date; bean.date = date; bean.timestampString = timestamp; bean.timestampNumber = timestamp; bean.timestampParis = timestamp; bean.timestampLosAngeles = timestamp; bean.timestamp = timestamp; String expected = "{" + "\"dateInParameter\":\"P2013/12/25\"," + "\"dateString\":\"/2013/12/25/\"," + "\"dateNumber\":" + millis + "," + "\"dateParis\":\"2013-12-25T01:00:00.000+0100\"," + "\"dateLosAngeles\":\"2013-12-24 16:00:00.000 -0800\"," + "\"date\":\"2013-12-25T00:00:00.000+0000\"," + "\"timestampString\":\"/2013/12/25/\"," + "\"timestampNumber\":" + millis + "," + "\"timestampParis\":\"2013-12-25T01:00:00.000+0100\"," + "\"timestampLosAngeles\":\"2013-12-24 16:00:00.000 -0800\"," + "\"timestamp\":\"2013-12-25T00:00:00.000+0000\"" + "}"; String result = mapper.write(bean); assertEquals(expected, result); FormatDateBean actual = mapper.read(expected); assertEquals(date, actual.dateString); assertEquals(date, actual.dateNumber); assertEquals(date.getTime(), actual.dateParis.getTime()); assertEquals(date.getTime(), actual.dateLosAngeles.getTime()); assertEquals(date, actual.date); assertEquals(date, actual.dateInParameter); assertEquals(timestamp, actual.timestampString); assertEquals(timestamp, actual.timestampNumber); assertEquals(timestamp.getTime(), actual.timestampParis.getTime()); assertEquals(timestamp.getTime(), actual.timestampLosAngeles.getTime()); assertEquals(timestamp, actual.timestamp); } }