@@ -64,6 +64,35 @@ public CalendarAsStringBean(long l) {
64
64
}
65
65
}
66
66
67
+ static class DateAsDefaultBean {
68
+ public Date date ;
69
+ public DateAsDefaultBean (long l ) { date = new java .util .Date (l ); }
70
+ }
71
+
72
+ static class DateAsDefaultBeanWithEmptyJsonFormat {
73
+ @ JsonFormat
74
+ public Date date ;
75
+ public DateAsDefaultBeanWithEmptyJsonFormat (long l ) { date = new java .util .Date (l ); }
76
+ }
77
+
78
+ static class DateAsDefaultBeanWithPattern {
79
+ @ JsonFormat (pattern ="yyyy-MM-dd" )
80
+ public Date date ;
81
+ public DateAsDefaultBeanWithPattern (long l ) { date = new java .util .Date (l ); }
82
+ }
83
+
84
+ static class DateAsDefaultBeanWithLocale {
85
+ @ JsonFormat (locale = "fr" )
86
+ public Date date ;
87
+ public DateAsDefaultBeanWithLocale (long l ) { date = new java .util .Date (l ); }
88
+ }
89
+
90
+ static class DateAsDefaultBeanWithTimezone {
91
+ @ JsonFormat (timezone ="CET" )
92
+ public Date date ;
93
+ public DateAsDefaultBeanWithTimezone (long l ) { date = new java .util .Date (l ); }
94
+ }
95
+
67
96
/*
68
97
/**********************************************************
69
98
/* Test methods
@@ -229,5 +258,53 @@ public void testWithTimeZoneOverride() throws Exception
229
258
json = w .writeValueAsString (new Date (0 ));
230
259
assertEquals (quote ("1969-12-31/19:00 EST" ), json );
231
260
}
261
+
262
+ /**
263
+ * Test to ensure that the default shape is correctly inferred as string or numeric,
264
+ * when this shape is not explicitly set with a <code>@JsonFormat</code> annotation
265
+ */
266
+ public void testDateDefaultShape () throws Exception
267
+ {
268
+ ObjectMapper mapper = new ObjectMapper ();
269
+ // No @JsonFormat => default to user config
270
+ mapper .enable (SerializationFeature .WRITE_DATES_AS_TIMESTAMPS );
271
+ String json = mapper .writeValueAsString (new DateAsDefaultBean (0L ));
272
+ assertEquals (aposToQuotes ("{'date':0}" ), json );
273
+ mapper .disable (SerializationFeature .WRITE_DATES_AS_TIMESTAMPS );
274
+ json = mapper .writeValueAsString (new DateAsDefaultBean (0L ));
275
+ assertEquals (aposToQuotes ("{'date':'1970-01-01T00:00:00.000+0000'}" ), json );
276
+
277
+ // Empty @JsonFormat => default to user config
278
+ mapper .enable (SerializationFeature .WRITE_DATES_AS_TIMESTAMPS );
279
+ json = mapper .writeValueAsString (new DateAsDefaultBeanWithEmptyJsonFormat (0L ));
280
+ assertEquals (aposToQuotes ("{'date':0}" ), json );
281
+ mapper .disable (SerializationFeature .WRITE_DATES_AS_TIMESTAMPS );
282
+ json = mapper .writeValueAsString (new DateAsDefaultBeanWithEmptyJsonFormat (0L ));
283
+ assertEquals (aposToQuotes ("{'date':'1970-01-01T00:00:00.000+0000'}" ), json );
284
+
285
+ // @JsonFormat with Shape.ANY and pattern => STRING shape, regardless of user config
286
+ mapper .enable (SerializationFeature .WRITE_DATES_AS_TIMESTAMPS );
287
+ json = mapper .writeValueAsString (new DateAsDefaultBeanWithPattern (0L ));
288
+ assertEquals (aposToQuotes ("{'date':'1970-01-01'}" ), json );
289
+ mapper .disable (SerializationFeature .WRITE_DATES_AS_TIMESTAMPS );
290
+ json = mapper .writeValueAsString (new DateAsDefaultBeanWithPattern (0L ));
291
+ assertEquals (aposToQuotes ("{'date':'1970-01-01'}" ), json );
292
+
293
+ // @JsonFormat with Shape.ANY and locale => STRING shape, regardless of user config
294
+ mapper .enable (SerializationFeature .WRITE_DATES_AS_TIMESTAMPS );
295
+ json = mapper .writeValueAsString (new DateAsDefaultBeanWithLocale (0L ));
296
+ assertEquals (aposToQuotes ("{'date':'1970-01-01T00:00:00.000+0000'}" ), json );
297
+ mapper .disable (SerializationFeature .WRITE_DATES_AS_TIMESTAMPS );
298
+ json = mapper .writeValueAsString (new DateAsDefaultBeanWithLocale (0L ));
299
+ assertEquals (aposToQuotes ("{'date':'1970-01-01T00:00:00.000+0000'}" ), json );
300
+
301
+ // @JsonFormat with Shape.ANY and timezone => STRING shape, regardless of user config
302
+ mapper .enable (SerializationFeature .WRITE_DATES_AS_TIMESTAMPS );
303
+ json = mapper .writeValueAsString (new DateAsDefaultBeanWithTimezone (0L ));
304
+ assertEquals (aposToQuotes ("{'date':'1970-01-01T01:00:00.000+0100'}" ), json );
305
+ mapper .disable (SerializationFeature .WRITE_DATES_AS_TIMESTAMPS );
306
+ json = mapper .writeValueAsString (new DateAsDefaultBeanWithTimezone (0L ));
307
+ assertEquals (aposToQuotes ("{'date':'1970-01-01T01:00:00.000+0100'}" ), json );
308
+ }
232
309
}
233
310
0 commit comments