Как сериализовать формат даты Длинной эпохи в дату, используя JSONObject - PullRequest
0 голосов
/ 04 мая 2020

У меня есть json строковая полезная нагрузка, имеющая дату в формате эпох (длинных). Но мне нужно преобразовать это в формат ггггMMddHHmmss. Я использую пользовательские сериализаторы, где я могу применить это к определенному полю. Но сериализация не может применить к этому полю.

Тест. java

 private static String json = "{

          "dcCountryCode": "US",
          "orderDate": 1517855400000
        }";



    @JsonSerialize(using = CustomLongSerializer.class)
    private static Long date;

    public static void main(String[] args) {


        JSONObject obj = new JSONObject(json);

        String country = obj.getString("dcCountryCode");

        date = obj.getLong("orderDate");


        System.out.println(country);

        System.out.println(date);

    }

CustomLongSerializer. java


    package com.company;

    import com.fasterxml.jackson.core.JsonGenerator;
    import com.fasterxml.jackson.databind.SerializerProvider;
    import com.fasterxml.jackson.databind.ser.std.StdSerializer;

    import java.io.IOException;
    import java.text.SimpleDateFormat;


    // This is for Custom Date serializer
    public class CustomLongSerializer extends StdSerializer<Long> {

        protected CustomLongSerializer(Class<Long> t) {
            super(t);
        }

        protected CustomLongSerializer() {
            this(Long.class);
        }

        private static final long serialVersionUID = 1L;

        @Override
        public void serialize(Long value, JsonGenerator gen, SerializerProvider provider) throws IOException {

            SimpleDateFormat df = new SimpleDateFormat("yyyyMMddHHmmss");
            gen.writeString(df.format(value));

        }

    }



Expected Out put in yyyyMMddHHmmss format.

But still returning epoch date format.

Can anyone help me with this.

1 Ответ

0 голосов
/ 04 мая 2020

Это может быть реализовано более простым способом, отключив SerializationFeature.WRITE_DATES_AS_TIMESTAMPS и установив DateFormatter в маппере:

public class TestDate {
    private String dcCountryCode;
    private Date date;
// getters/setters
}

// test class
String json = "{\n" +
"          \"dcCountryCode\": \"US\",\n" +
"          \"date\": 1517855400000\n" +
"        }";

ObjectMapper mapper = new ObjectMapper()
                .disable(SerializationFeature.WRITE_DATES_AS_TIMESTAMPS)
                .setDateFormat(new SimpleDateFormat("yyyyMMddHHmmss"));

TestDate test = mapper.readValue(json, TestDate.class);

System.out.println(mapper.writerWithDefaultPrettyPrinter().writeValueAsString(test));

Вывод:

{
  "dcCountryCode" : "US",
  "date" : "20180205203000"
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...