![](/img/trans.png)
[英]Proto deserialization from json will fail on new fields or unknown enum values
[英]json deserialization fail for valid format
我有一個日期如下的json文件:
{
...
"dob":"20001010",
"registerdate":"20001010121212",
...
}
我在課堂上使用:
public class User implements Serializable {
... some other
@JsonFormat(shape = JsonFormat.Shape.STRING, pattern = "yyyyMMdd
public java.util.Date dob; // this works
@JsonFormat(shape = JsonFormat.Shape.STRING, pattern = "yyyyMMddHHmmss")
public java.util.Date registerdate;
}
然后在我的測試中我使用 Gson 來轉換文件
User user = new Gson().fromJson("user.json", User.class);
但是當這個運行時,我得到:
com.google.gson.JsonSyntaxException: 20001010121212
我 treid 與: yyyyMMddHHmmss 或 YYYYMMddHHmmss 或 YYYYMMDDHHmmss 相同的結果
絨球:
<dependency>
<groupId>com.google.code.gson</groupId>
<artifactId>gson</artifactId>
<version>2.8.5</version>
</dependency>
如果您使用的是 GSON,則需要解析類似的日期
import java.util.Date;
import com.google.gson.Gson;
import com.google.gson.GsonBuilder;
public class GSONExample {
private static String json = "{\r\n" + " \"dob\":\"20001010121212\"\r\n" + "}";
public static void main(String[] args) {
Gson gson = new GsonBuilder().setDateFormat("yyyyMMddHHmmss").create();
ItemDob itemDob = gson.fromJson(json, ItemDob.class);
System.out.println(itemDob.getDob());
}
}
class ItemDob {
private Date dob;
public Date getDob() {
return dob;
}
public void setDob(Date dob) {
this.dob = dob;
}
}
輸出
2000 年 10 月 10 日星期二 12:12:12 IST
編輯如果要使用注釋指定日期格式,請使用 jackson。 例如,
import java.util.Date;
import com.fasterxml.jackson.annotation.JsonFormat;
import com.fasterxml.jackson.core.JsonProcessingException;
import com.fasterxml.jackson.databind.JsonMappingException;
import com.fasterxml.jackson.databind.ObjectMapper;
public class JacksonExample {
private static String json = "{\r\n" +
" \"dob\": \"20001010121212\"\r\n" +
"}";
public static void main(String[] args) throws JsonMappingException, JsonProcessingException {
ItemDob itemDob = new ObjectMapper().readValue(json, ItemDob.class);
System.out.println(itemDob.getDob());
}
}
class ItemDob {
@JsonFormat(shape = JsonFormat.Shape.STRING, pattern = "yyyyMMddHHmmss")
private Date dob;
public Date getDob() {
return dob;
}
public void setDob(Date dob) {
this.dob = dob;
}
}
輸出:
2000 年 10 月 10 日星期二 17:42:12 IST
基本上com.google.gson.Gson不識別注釋com.fasterxml.jackson.annotation.JsonFormat (兩個不同的庫)
這是另一個僅使用 fastxml lib 中的 ObjectMapper 的解決方案
import com.fasterxml.jackson.annotation.JsonFormat;
import com.fasterxml.jackson.core.JsonProcessingException;
import com.fasterxml.jackson.databind.ObjectMapper;
import java.io.Serializable;
import java.util.Date;
public class DemoApplication {
public static void main(String[] args) throws JsonProcessingException {
String json = "{\"dob\":\"20001010121212\"}";
ObjectMapper objectMapper = new ObjectMapper();
User user = objectMapper.readValue(json, User.class);
System.out.println(user.dob);
}
}
class User implements Serializable {
@JsonFormat(shape = JsonFormat.Shape.STRING, pattern = "yyyyMMddHHmmss")
public Date dob;
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.