Неправильная дата при десериализации с использованием Джексона - PullRequest
0 голосов
/ 26 февраля 2019

Я перепробовал все, что знаю, чтобы решить эту проблему, но я застрял.По какой-то причине я добавляю дату ниже в строку JSON, а Mapper добавляет часы к дате.Почему он добавляет 18: 00: 00?

   String json = "{\n" + 
        "  \"feature\": {\n" + 
        "    \"due_date\": \"2019-02-25\"\n" + 
        "  }\n" + 
        "}";

    ObjectMapper mapper = new ObjectMapper();
    mapper.enable(SerializationFeature.WRAP_ROOT_VALUE);
    Wrapper feature = mapper.readValue(json, Wrapper.class);
    Feature sample = feature.getFeature();
    System.out.println(sample.getDueDate());

public class Feature implements Serializable {
    @JsonDeserialize(using = DateAdaptor.class)
    private String dueDate;
    public Date getDueDate() {
        return due_date;
    }
    @JsonProperty("due_date")
    public void setDueDate(Date dueDate) {
        this.due_date = dueDate;
    }
}

    public class Wrapper implements Serializable {
private Feature feature;
public Feature getFeature() {
    return feature;
}
public void setFeature(Feature feature) {
    this.feature = feature;
}
    }

public class DateAdaptor extends StdDeserializer<Date>{

    private SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM-dd");

    public DateAdaptor() {
        this(null);
    }

    protected DateAdaptor(Class<?> vc) {
        super(vc);
    }

    @Override
    public Date deserialize(JsonParser jsonparser, DeserializationContext context)
      throws IOException, JsonProcessingException {

        String date = jsonparser.getText();
        try {
            return formatter.parse(date);
        } catch (ParseException e) {
            throw new RuntimeException(e);
        }
    }

}

OUTPUT Sun Feb 24 18:00:00 CST 2019

1 Ответ

0 голосов
/ 26 февраля 2019

Спасибо за помощь.Я узнал, в чем была моя проблема.Я реализовал класс в неправильном разделе / ​​порядке кода.Это работает только при десериализации объекта.Поэтому код должен выглядеть следующим образом.

public class Feature implements Serializable {
private String dueDate;
@JsonDeserialize(using = DateAdaptor.class)
public Date getDueDate() {
    return due_date;
}
@JsonProperty("due_date")
public void setDueDate(Date dueDate) {
    this.due_date = dueDate;
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...