Java Jackson-反序列化不同的日期格式
我使用JsonDeserializer将我的日期格式化如下:Java Jackson-反序列化不同的日期格式,java,jackson,Java,Jackson,我使用JsonDeserializer将我的日期格式化如下: public class CustomDateMappingDeserialize extends JsonDeserializer<Date>{ @Override public Date deserialize(JsonParser paramJsonParser, DeserializationContext paramDeserializationContext) throws IOExcepti
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);
}
}
}
而不是在自定义类中定义它
非常感谢您的帮助/指点。对于之前类似性质的需求,我使用了文档中的多解析器选项 在类似的行之后,下面的自定义类就是一个示例
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;
}
}
import java.io.IOException;
导入java.text.ParseException;
导入java.text.simpleDataFormat;
导入java.util.Date;
导入java.util.Locale;
导入com.fasterxml.jackson.core.JsonParser;
导入com.fasterxml.jackson.core.JsonProcessingException;
导入com.fasterxml.jackson.databind.DeserializationContext;
导入com.fasterxml.jackson.databind.JsonDeserializer;
公共类CustomDeserializer扩展JsonDeserializer{
私有静态最终字符串[]日期\格式=新字符串[]{“MMM dd,yyyy HH:mm:ss”,“MMM dd,yyyy”};
@凌驾
公共日期反序列化(JsonParser paramJsonParser,反序列化上下文paramDeserializationContext)
抛出IOException、JsonProcessingException{
//TODO自动生成的方法存根
if(paramJsonParser==null | |“”.equals(paramJsonParser.getText())
返回null;
字符串日期=paramJsonParser.getText();
for(字符串格式:日期格式){
试一试{
返回新的SimpleDataFormat(格式,Locale.US).parse(日期);
}捕获(解析异常){
}
}
返回null;
}
}
编辑:
您还可以使用multidatetimeparser使用建议中概述的其他库
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;
}
}