解决Unsupported class file major version 61错误
线上遇到这个报错,通常就是Java运行环境版本比编译时用的版本低,整理了原因和两种实际可用的处理方式。
支持通配符SSL证书、多域名证书、IP证书。适配ACME接口, 支持Zerossl、Let's Encrypt和Google等渠道。登录已有账号
2026-08-19 16:15:47 Fastjson Java JSON序列化
做 Java 开发,用 Fastjson 做 JSON 和 Java Bean 互转的话,日期格式基本是迟早要踩的坑。
默认情况下它只支持 yyyy-MM-dd 这类标准格式,一旦碰到 MM-dd-yyyy 这种非标准的,反序列化直接抛异常,整个转换就走不通了。
解决起来其实不复杂,Fastjson 自带的 @JSONField 注解就支持自定义日期格式,直接加在对应字段上指定 format 就行。
举个完整的例子,定义一个 User 类,给 birthdate 字段加上注解指定格式:
import com.alibaba.fastjson.annotation.JSONField;
import java.util.Date;
public class User {
private String name;
@JSONField(format = "MM-dd-yyyy")
private Date birthdate;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public Date getBirthdate() {
return birthdate;
}
public void setBirthdate(Date birthdate) {
this.birthdate = birthdate;
}
}
对应的 JSON 字符串里,birthdate 就是月-日-年的形式:
{
"name": "John Doe",
"birthdate": "05-15-1990"
}
转换代码也很常规,直接用 parseObject 方法解析:
import com.alibaba.fastjson.JSON;
public class Main {
public static void main(String[] args) {
String jsonStr = "{\"name\":\"John Doe\",\"birthdate\":\"05-15-1990\"}";
User user = JSON.parseObject(jsonStr, User.class);
System.out.println("Name: " + user.getName());
System.out.println("Birthdate: " + user.getBirthdate());
}
}
加了注解之后,Fastjson 解析到 birthdate 字段时,就会按照指定的格式去匹配字符串,正常转成 Date 对象。
这里其实容易踩几个坑。格式字符串必须和 JSON 里的实际格式完全一致,尤其注意大小写。
月份是大写的 MM,写成小写 mm 就变成分钟了,解析出来的时间完全不对,排查起来还挺费时间。
Java Bean 里对应的字段必须是 Date 类型,其他日期类型不一定能按预期工作。
另外确认下项目里的 Fastjson 版本,主流的 1.x 版本都支持这个注解,过于老旧的版本可能会有兼容问题。
线上遇到这个报错,通常就是Java运行环境版本比编译时用的版本低,整理了原因和两种实际可用的处理方式。
线上遇到“Channel was garbage collected without being shut down”的错误,梳理了ManagedChannel关闭机制和常见踩坑点,给出实际可用的修复方式。
记录使用 MinIO Java SDK 生成预签名 URL 的实践,包含下载和上传场景,以及一些容易出错的点。
记录 datetime 字段定义、插入、格式化查询以及 Java 端类型映射、时区等问题,避免线上踩坑。
想象一下从精确到极致的BigDecimal世界踏入“四舍五入”的Double领域。本文揭示Java数值转换的奥秘,解析精度损失的陷阱与范围限制的边界,助你明智选择,避免程序中的“财务黑洞”。