杰克逊日期格式问题:Java Bean 转 JSON 字符串转换

8

我将使用Jackson 2.7.4版本将Java Bean转换为JSON字符串。在此过程中,我遇到了日期格式问题。使用的是Java 1.7版本。

Bean:

public class BaseBean {

    private java.util.Date fromDate;

    public Date getFromDate() {
        return fromDate;
    }

    public void setFromDate(Date fromDate) {
        this.fromDate = fromDate;
    }
}

我正在得到以下日期格式:

{"fromDate":1465370289436}

这与我无关。然后我配置了以下代码。
ObjectMapper objectMapper = new ObjectMapper();
objectMapper.configure(com.fasterxml.jackson.databind.SerializationFeature.WRITE_DATES_AS_TIMESTAMPS , false);
jsonInString = objectMapper.writeValueAsString(objJava);

然后我在JSON中获得以下日期格式:下面的日期
{"fromDate":"2016-06-08T07:47:06.636+0000"}

期望的日期格式:

{"fromDate":{"date":8,"day":3,"hours":12,"minutes":48,"month":5,"seconds":9,"time":1465370289436,"timezoneOffset":-330,"year":116}}

有没有任何配置可以处理它,并在JSON字符串中得到期望的日期格式?
3个回答

6

JSON日期序列化器:

public class CustomDateSerializer extends JsonSerializer<Date> {

@Override
public void serialize(Date date, JsonGenerator jgen, SerializerProvider provider) throws IOException,
        JsonProcessingException {

    // below methods of Date object is deprecated - consider this as sample example 
    int idate = date.getDate();
    int day = date.getDay();
    int hours = date.getHours();
    int minutes = date.getMinutes();
    int month = date.getMonth();
    int seconds = date.getSeconds();
    long time = date.getTime();
    int timezoneOffset = date.getTimezoneOffset();
    int year = date.getYear();

    jgen.writeStartObject();

    jgen.writeNumberField("date", idate);
    jgen.writeNumberField("day", day);
    jgen.writeNumberField("hours", hours);
    jgen.writeNumberField("minutes", minutes);
    jgen.writeNumberField("month", month);
    jgen.writeNumberField("seconds", seconds);
    jgen.writeNumberField("time", time);
    jgen.writeNumberField("timezoneOffset", timezoneOffset);
    jgen.writeNumberField("year", year);

    jgen.writeEndObject();      
}

@Override
public Class<Date> handledType() {
    return Date.class;
}

}

在 SimpleModule 中设置序列化器:

ObjectMapper objectMapper = new ObjectMapper();
    String jsonInString = "";
    try {
        SimpleModule myModule = new SimpleModule();

        myModule.addSerializer(Date.class, new CustomDateSerializer());
        objectMapper.registerModule(myModule);
        jsonInString = objectMapper.writerWithDefaultPrettyPrinter().writeValueAsString(objJava);
    } catch (JsonProcessingException e1) {          
        e1.printStackTrace();
    }

希望这能帮上你!

0

使用JsonSerialize进行注释。可能可以重写JsonSerializer的序列化方法。


@JsonSerialize(using = MySerializer.class) private java.util.Date fromDate;class MySerializer extends JsonSerializer<T> { @Override public void serialize(T value, JsonGenerator gen, SerializerProvider serializers) throws IOException { gen.writeString(//这里需要什么格式...) } } - Amit Yatagiri

0

您可以向您的类中添加方法以获取:

  • 日期
  • 天数
  • 小时
  • 分钟
  • ...

例如:

private DateFormat hoursDF = new SimpleDateFormat("HH");

public String getHours() {
    return hoursDF.format(fromDate);
}

这种方法对我来说不可行。您能否提供其他解决方案? - Rahul Mittal

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接