2017-01-31 4 views
0

Я использую JsonDeserializer отформатировать даты, как показано ниже:Джексон - Deserialise Различные форматы даты

public class CustomDateMappingDeserialize extends JsonDeserializer<Date>{ 

    @Override 
    public Date deserialize(JsonParser paramJsonParser, DeserializationContext paramDeserializationContext) throws IOException, JsonProcessingException { 
     SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd"); 
      String date = paramJsonParser.getText(); 
      try { 
       Date formattedDate= format.parse(date); 
       return formattedDate; 
      } catch (ParseException e) { 
       throw new RuntimeException(e); 
      } 

    } 

} 

, но проблема в том, что я должен определить формат фиксирован и у меня есть много различных форматов дат.

Можем ли мы сделать что-то вроде этого:

@JsonDeserialize(using = CustomDateMappingDeserialize.class, format ="yyy-dd-mm") 
public void setDate(Date date) { 
    this.date = date; 
} 

Вместо определения его пользовательского класса?

Любые помощь/указатели будут высоко оценены.

ответ

1

Для предыдущего требования аналогичного характера я использовал параметры нескольких парсеров, как описано в документе here.

После подобных линий, следующий пользовательский класс является примером

import java.io.IOException; 
import java.text.ParseException; 
import java.text.SimpleDateFormat; 
import java.util.Date; 
import java.util.Locale; 

import com.fasterxml.jackson.core.JsonParser; 
import com.fasterxml.jackson.core.JsonProcessingException; 
import com.fasterxml.jackson.databind.DeserializationContext; 
import com.fasterxml.jackson.databind.JsonDeserializer; 

public class CustomDeserializer extends JsonDeserializer<Date> { 
    private static final String[] DATE_FORMATS = new String[] { "MMM dd, yyyy HH:mm:ss", "MMM dd, yyyy" }; 

    @Override 
    public Date deserialize(JsonParser paramJsonParser, DeserializationContext paramDeserializationContext) 
      throws IOException, JsonProcessingException { 
     // TODO Auto-generated method stub 
     if (paramJsonParser == null || "".equals(paramJsonParser.getText())) 
      return null; 
     String date = paramJsonParser.getText(); 

     for (String format : DATE_FORMATS) { 
      try { 
       return new SimpleDateFormat(format, Locale.US).parse(date); 
      } catch (ParseException e) { 
      } 
     } 
     return null; 
    } 
} 

Edit:

Вы также можете использовать дополнительные библиотеки, как это изложено предложение here использованием MultiDateTimeParsers.

Смежные вопросы