对于@JsonIgnore注解,它通常用于忽略对象的某个属性(字段)在序列化和反序列化过程中的处理。然而,对于 'Date' 类型的属性,@JsonIgnore注解可能不会直接生效,因为 'Date' 类型的序列化和反序列化通常由默认的日期序列化器和反序列化器处理。
如果你想要在序列化和反序列化过程中忽略 'Date' 类型的属性,可以考虑以下几种方法:
java
import com.fasterxml.jackson.annotation.JsonIgnore;
import lombok.Data;
import java.util.Date;
@Data
public class HolidayRequest {
private String id;
private String processInstanceId;
private Date createTime;
private Date updateTime;
private String applicant;
private Integer days;
private String status;
@JsonIgnore
public Date getCreateTime() { return createTime; }
@JsonIgnore
public Date getUpdateTime() { return updateTime; }
// === 可选:如果需要展示格式化时间 ===
public String getCreateTimeFormatted() {
if (createTime != null) {
return new java.text.SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(createTime);
}
return null;
}
public String getUpdateTimeFormatted() {
if (updateTime != null) {
return new java.text.SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(updateTime);
}
return null;
}
}
java
@Resource
private ObjectMapper objectMapper;
@Test
public void test1() throws JsonProcessingException {
HolidayRequest request = new HolidayRequest();
request.setId("1");
request.setApplicant("张三");
request.setDays(3);
request.setCreateTime(new Date());
request.setUpdateTime(new Date());
String json = objectMapper.writeValueAsString(request);
System.out.println("序列化结果: " + json);
}
java
序列化结果:
{
"id": "1",
"processInstanceId": null,
"applicant": "张三",
"days": 3,
"status": null,
"createTimeFormatted": "2025-11-27 16:40:17",
"updateTimeFormatted": "2025-11-27 16:40:17"
}
为什么这样有效?
- 直接控制序列化:Jackson 主要通过 getter 方法进行序列化
- 不影响反序列化:setter 方法没有注解,仍可接收数据
- 数据库操作正常:JPA/Hibernate 仍能正常访问字段