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.

Reply via email to