Java 里判断 BigDecimal 是否为 0,compareTo 和 equals 的差异
比较 BigDecimal 是否为零时,equals 会踩精度坑,推荐用 compareTo 和 BigDecimal.ZERO。
支持通配符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 版本都支持这个注解,过于老旧的版本可能会有兼容问题。
比较 BigDecimal 是否为零时,equals 会踩精度坑,推荐用 compareTo 和 BigDecimal.ZERO。
线上遇到这个报错,通常就是Java运行环境版本比编译时用的版本低,整理了原因和两种实际可用的处理方式。
拆解 Spring WebFlux 编程模型与服务器实践,从 Reactor 数据类型到 Netty 集成,用真实代码聊聊响应式开发的要点。
跑单测突然报 Command line is too long,大多数情况在 Run Configuration 里勾一个选项就完事。这里把原因和几种方案一起记一下。