- Resolved [org.springframework.http.converter.HttpMessageNotWritableException: Could not write JSON: temporal;
@TableField(exist = false)
private Date hiredate;
@TableField(exist = false)
private Date formerDate;
@TableField(exist = false)
private Date hiredateYearMonth;
@TableField(exist = false)
private Date formerDateYearMonth;
public boolean isHireDateOrFormerDate() {
return hiredate != null || formerDate != null;
}
-
isHireDateOrFormerDate()是个 boolean getter 方法; -
Jackson 在序列化对象时,会自动把所有
getXXX()和isXXX()方法认为是属性; -
因此它会生成一个 JSON 属性名:
hireDateOrFormerDate; -
但是你的方法返回值是
boolean,没有对应字段; -
Jackson 误以为这是一个时间(
temporal)类型,因为名称中包含 “Date”; -
结果在序列化时尝试用
JavaTimeModule去处理,导致异常。
三、解决方案(任选一种)
方案 1:忽略序列化这个方法(推荐)
在方法上添加 Jackson 注解:
三、解决方案(任选一种) 方案 1:忽略序列化这个方法(推荐) 在方法上添加 Jackson 注解:
方案 2:修改方法名
改成非 isXXX 命名:
public boolean hireDateOrFormerDateExists() {
return hiredate != null || formerDate != null;
}
Jackson 只会识别 getXXX() 和 isXXX() 方法为属性,这样就不会被当成 JSON 字段。
方案 3:在类上全局控制序列化
如果你确实希望保留很多类似逻辑辅助方法,可以统一配置:
@JsonIgnoreProperties(value = { "hireDateOrFormerDate" }) public class SalaryAccountingStatement { ... }
方案 4:自定义序列化器
如果你有特殊序列化逻辑(例如要输出字符串“入职/离职”),可以自定义序列化方式:
@JsonProperty("hireDateOrFormerDate")
public String getHireDateOrFormerDateStr() {
if (hiredate != null) return "入职";
if (formerDate != null) return "离职";
return "无";
}

浙公网安备 33010602011771号