项目需求接口传输过程中序列化使用JSON.toJSONString()方法进行序列化时候误使用其他类库的注解进行忽略字段导致一直无效,最后ai中找到答案,具体内容如下:
一、原因分析
@JsonIgnoreProperties 是 Jackson 库的注解,而 JSON.toJSONString() 是 Fastjson 库的序列化方法。两者属于不同的 JSON 处理框架,Fastjson 默认不识别 Jackson 的注解,导致注解失效。
二、解决方案
1. 统一 JSON 库
方案一:改用 Jackson 的 ObjectMapper 序列化
ObjectMapper mapper = new ObjectMapper();
String json = mapper.writeValueAsString(entity);
此方式可确保 @JsonIgnoreProperties 生效。
方案二:替换为 Fastjson 的注解
若需继续使用 JSON.toJSONString(),需将注解替换为 Fastjson 的 @JSONField(serialize = false):
public class Entity {
@JSONField(serialize = false) // Fastjson 忽略此字段
private String secretField;
}
注意:需导入 com.alibaba.fastjson.annotation.JSONField。
2. 字段命名规范(Fastjson 适配)
若需兼容两种库,确保字段命名符合 Fastjson 默认解析规则(如驼峰命名或原始字段名),避免因命名差异导致忽略失败。
三、验证与调试
检查 Fastjson 序列化结果
System.out.println(JSON.toJSONString(entity)); // 观察 secretField 是否被忽略
确认注解导入包
Jackson 注解路径:com.fasterxml.jackson.annotation.JsonIgnoreProperties;
Fastjson 注解路径:com.alibaba.fastjson.annotation.JSONField。
四、总结
需用 JSON.toJSONString() 改用 @JSONField(serialize = false)
需用 @JsonIgnoreProperties 切换为 Jackson 的 ObjectMapper