簡體   English   中英

無法從JSON解析“日期”

[英]Failed to parse “Date” from JSON

我在REST響應中具有以下JSON字符串:

"09:41:50 CET"

對於對應的POJO映射器類,此字段具有Date類型。 因此,我嘗試了Jackson和GSON將JSON映射到Java Object,但是都失敗,並顯示以下消息:

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類中將類型修改為字符串或其他任何類型,因為我從mvn依賴項獲得了這些POJO類。

試試這個:

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元素的dateFormat

不確定要使用哪種類型的支架,但是如果您使用的是彈簧支架,則可以通過實現自定義Converter來實現,請查看https://www.baeldung.com/spring-mvc-custom-data-binder上的示例。

從Jackson v2.0開始,您可以直接在Object成員上使用@JsonFormat注釋;

@JsonFormat(shape = JsonFormat.Shape.STRING, pattern = "HH:mm:ss", timezone="CET")
private Date date;

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM