- 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 "无";
}

 

 

posted @ 2025-11-04 15:30  八英里  阅读(3)  评论(0)    收藏  举报