Define a customer DateTimeFormatter, then use the specific formatter that
you want in defining a custom serializer/deserializer classes, both of
which are really only one line of code each.
======================== Foo.java ==========================
package scratch;
import java.time.LocalDate;
import java.time.format.DateTimeFormatter;
import java.util.ArrayList;
import java.util.List;
import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
import com.fasterxml.jackson.annotation.JsonProperty;
import com.fasterxml.jackson.core.JsonProcessingException;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.fasterxml.jackson.databind.annotation.JsonDeserialize;
import com.fasterxml.jackson.databind.annotation.JsonSerialize;
// My JSON Serializer/Deserializer classes
import json.MeetingDateDeserializer;
import json.MeetingDateSerializer;
import json.MeetingIDDeserializer;
import json.MeetingIDSerializer;
import json.MeetingShortDateDeserializer;
import json.MeetingShortDateSerializer;
import json.MeetingTitleDeserializer;
import json.MeetingTitleSerializer;
@JsonIgnoreProperties(ignoreUnknown = true)
public class Foo {
static public final DateTimeFormatter meetingTitleFormatter =
DateTimeFormatter.ofPattern("dd MMMM yyyy");
static public final DateTimeFormatter meetingIDFormatter =
DateTimeFormatter.ofPattern("yyyyMMdd");
static public final DateTimeFormatter meetingDateFormatter =
DateTimeFormatter.ofPattern("yyyy-MM-dd");
static public final DateTimeFormatter meetingShortDateFormatter =
DateTimeFormatter.ofPattern("yyyy MMM dd");
static public final DateTimeFormatter meetingLongDateFormatter =
DateTimeFormatter.ofPattern("yyyy MMMM dd");
@JsonDeserialize(using = MeetingIDDeserializer.class)
@JsonSerialize(using = MeetingIDSerializer.class)
@JsonProperty("MeetingID")
private LocalDate meetingID;
@JsonDeserialize(using = MeetingDateDeserializer.class)
@JsonSerialize(using = MeetingDateSerializer.class)
@JsonProperty("MeetingDate")
private LocalDate meetingDate;
@JsonDeserialize(using = MeetingTitleDeserializer.class)
@JsonSerialize(using = MeetingTitleSerializer.class)
@JsonProperty("MeetingTitle")
private LocalDate meetingTitle;
@JsonDeserialize(using = MeetingShortDateDeserializer.class)
@JsonSerialize(using = MeetingShortDateSerializer.class)
@JsonProperty("MeetingShortDate")
private LocalDate meetingShortDate;
....
======================== MeetingShortDateDeserializer.java
=====================================
import static scratch.Foo.meetingShortDateFormatter;
import java.io.IOException;
import java.time.LocalDate;
import com.fasterxml.jackson.core.JsonParser;
import com.fasterxml.jackson.core.JsonProcessingException;
import com.fasterxml.jackson.databind.DeserializationContext;
import com.fasterxml.jackson.databind.deser.std.StdDeserializer;
public class MeetingShortDateDeserializer extends
StdDeserializer<LocalDate> {
private static final long serialVersionUID = 1L;
protected MeetingShortDateDeserializer() {
super(LocalDate.class);
}
@Override
public LocalDate deserialize(JsonParser jsonParser,
DeserializationContext context) throws IOException, JsonProcessingException
{
return LocalDate.parse(jsonParser.readValueAs(String.class),
meetingShortDateFormatter);
}
========================= MeetingShortDateDeserializer.java
==================================
import static scratch.Foo.meetingShortDateFormatter;
import java.io.IOException;
import java.time.LocalDate;
import com.fasterxml.jackson.core.JsonParser;
import com.fasterxml.jackson.core.JsonProcessingException;
import com.fasterxml.jackson.databind.DeserializationContext;
import com.fasterxml.jackson.databind.deser.std.StdDeserializer;
public class MeetingShortDateDeserializer extends
StdDeserializer<LocalDate> {
private static final long serialVersionUID = 1L;
protected MeetingShortDateDeserializer() {
super(LocalDate.class);
}
@Override
public LocalDate deserialize(JsonParser jsonParser,
DeserializationContext context) throws IOException, JsonProcessingException
{
return LocalDate.parse(jsonParser.readValueAs(String.class),
meetingShortDateFormatter);
}
On Monday, November 30, 2015 at 3:06:24 PM UTC-5 Tatu Saloranta wrote:
> Aside from possible global configuration, you should be able to use
> @JsonFormat annotation, something like:
>
> @JsonFormat(patern="yyyyMMdd")
> public LocalDate creationDate;
>
> to specify format to use for both serialization and deserialization.
>
> Specifying global DateFormat does not unfortunately work, as formatters
> between java.util.Date, Joda and Java 8 date/time are not interchangeable.
>
> I think it is also possible to register deserializes that
> `jackson-datatype-jsr310` provides, but with alternate defaults. I have not
> done that myself but have seen examples of such usage (via improvements
> ideas to allow overriding). Perhaps someone can share their usage, if any.
>
> -+ Tatu +-
>
> ps. I have ideas of how to improve configurability significantly for 2.8,
> via per-type defaults for anything that is confgurable using @JsonFormat --
> unfortunately this feature did not make it in 2.7
>
>
>
> On Mon, Nov 30, 2015 at 11:05 AM, Max Posner <[email protected]> wrote:
>
>> Hi! I have a problem: i have date string in specified format (yyyyMMdd),
>> in my class i use
>> LocalDate from java.time;
>>
>> How i can change the default dateTimeFormatter in deserializer (without
>> creation my custom deserializers extending from LocalDateDeserializer where
>> i can override it)?
>> Thanks!
>>
> --
>> You received this message because you are subscribed to the Google Groups
>> "jackson-user" group.
>> To unsubscribe from this group and stop receiving emails from it, send an
>> email to [email protected].
>> To post to this group, send email to [email protected].
>> For more options, visit https://groups.google.com/d/optout.
>>
>
>
--
You received this message because you are subscribed to the Google Groups
"jackson-user" group.
To unsubscribe from this group and stop receiving emails from it, send an email
to [email protected].
To view this discussion on the web visit
https://groups.google.com/d/msgid/jackson-user/88f470e9-ffaf-46da-b544-2f7e523d826dn%40googlegroups.com.