Не удалось проанализировать «Дата» из JSON - PullRequest
0 голосов
/ 09 января 2019

У меня есть следующая строка JSON в ответе REST:

"09:41:50 CET"

Для соответствующего класса картографирования POJO есть тип Date для этого поля. Итак, я попробовал Джексона и GSON сопоставить JSON с Java-объектом, но оба не смогли получить следующие сообщения:

GSON: java.text.ParseException: Failed to parse date ["09:41:50 CET"]: Invalid number: 09:4

Jackson: InvalidFormatException: Cannot deserialize value of type `java.util.Date` from
                                 String "09:41:50 CET": not a valid representation

К сожалению, я не могу изменить в классе POJO тип на строку или что-нибудь еще, потому что я получаю эти классы POJO из зависимости mvn.

Ответы [ 3 ]

0 голосов
/ 09 января 2019

Начиная с Jackson v2.0, вы можете использовать аннотацию @JsonFormat непосредственно на элементах Object;

@JsonFormat(shape = JsonFormat.Shape.STRING, pattern = "HH:mm:ss", timezone="CET")
private Date date;
0 голосов
/ 09 января 2019

Попробуйте с этим:

public static void main(String[] args) throws ParseException {

    String jsonStr = "{ \"date\" : \"09:41:50 CET\" }";
    Gson gson = new GsonBuilder().setDateFormat("HH:mm:ss").create();
    JsonElement element = gson.fromJson (jsonStr, JsonElement.class);

    OnlyDate date =gson.fromJson(element, new TypeToken<OnlyDate>(){}.getType());

    System.out.println(date.getDate());

}

Мой пример DTO:

public class OnlyDate implements Serializable{
    /**
     * 
     */
    private static final long serialVersionUID = 1L;

    @SerializedName("date")
    private Date date ;

    public Date getDate() {
        return date;
    }

    public void setDate(Date date) {
        this.date = date;
    }


}

Вы должны указать формат даты вашего элемента gson

0 голосов
/ 09 января 2019

Не уверен, какой у вас отдых, однако, если вы используете пружинный упор, вы можете сделать это, применив собственный конвертер, посмотрите пример на https://www.baeldung.com/spring-mvc-custom-data-binder.

...