java - 无法从 JSON 中解析“日期”
问题描述
我在 REST 响应中有以下 JSON 字符串:
"09:41:50 CET"
对于相应的 POJO 映射器类,该字段具有 Date 类型。所以我尝试过 Jackson 和 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 类中将类型修改为字符串或其他任何内容,因为我从 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
推荐阅读
- python - 将列表的一些索引分配给新列表
- apache-spark - 如何在 PySpark 中合并区间
- apache-camel - Camel FHIR在发送请求中设置http头
- c# - Angular 11 和 ASP.Net WebApi 项目 JWT 身份验证:我们如何从令牌内部获取数据?
- powershell - 更改 csv 文件中的参数
- performance - SQL Server 2019 插入性能:CentOS 7 与 Windows 10
- google-cloud-dataflow - Apache Beam Combine.perKey 为同一密钥生成多个输出
- reactjs - 如何在 React 状态下显示和更新深层嵌套值
- .net - 防止 NuGet 包修改构建属性
- swift - 哪些 LLVM 3 元组目标具有除基于 Xamarin 的语言之外的任何非 Swift 非 Objective-C 语言能够使用仅限 Swift 的框架?