首页 文章

Jackson 日期格式问题:java bean到JSON字符串转换

提问于
浏览
5

我正在使用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;
    }
}

我是 getting below date format

{"fromDate":1465370289436}

这不是我要求的 . 然后我 configured below code

ObjectMapper objectMapper = new ObjectMapper();
objectMapper.configure(com.fasterxml.jackson.databind.SerializationFeature.WRITE_DATES_AS_TIMESTAMPS , false);
jsonInString = objectMapper.writeValueAsString(objJava);

然后我在JSON中获得 below date 格式:

{"fromDate":"2016-06-08T07:47:06.636+0000"}

Expected date format :

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

是否有任何配置来处理它并在JSON字符串中获得预期的日期格式 .

3 回答

  • 3

    JSON date Serializer :

    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;
    }
    

    }

    Setting serializer in 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

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

    • 日期

    • 小时

    • 分钟

    • ......

    例如

    private DateFormat hoursDF = new SimpleDateFormat("HH");
    
    public String getHours() {
        return hoursDF.format(fromDate);
    }
    
  • 0

    用JsonSerialize注释 . 可以覆盖JsonSerializer的serialize方法 .

相关问题