You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Java自定义Character记录JSON反序列化报错求助

问题解决:JSON反序列化自定义Character Record失败

问题根源

异常信息明确提示Cannot deserialize value of type java.lang.Character from Object value,核心原因是你的自定义record类名Character和Java核心库的java.lang.Character(单个字符类型)重名。Jackson解析时误将目标类型识别为JDK自带的单个字符类,而该类只能接收单个字符值,无法匹配API返回的JSON对象结构,因此抛出反序列化异常。

解决方案

方案1:重命名自定义Record类(推荐)

直接修改自定义record的类名,避免与JDK核心类冲突,例如改成WizardCharacter:

import com.fasterxml.jackson.annotation.JsonAlias;
import com.fasterxml.jackson.annotation.JsonIgnoreProperties;

@JsonIgnoreProperties(ignoreUnknown = true)
public record WizardCharacter(
        @JsonAlias("fullName") String name,
        @JsonAlias("hogwartsHouse") String house,
        @JsonAlias("birthdate") String birthdate,
        @JsonAlias("index") Integer characterID) {
}

同步修改反序列化代码中的类型:

try {
    WizardCharacter harry = mapper.readValue(json.toString(), WizardCharacter.class);
    System.out.println(harry.toString());
} catch (JsonProcessingException e) {
    throw new RuntimeException(e);
}

方案2:使用全限定类名指定目标类型

若不想修改类名,在调用readValue时明确指定自定义类的全限定路径(替换为你项目实际的包名):

try {
    Character harry = mapper.readValue(json.toString(), dev.alexcastellanos.potterapi.Character.class);
    System.out.println(harry.toString());
} catch (JsonProcessingException e) {
    throw new RuntimeException(e);
}

此方式可让Jackson准确识别你自定义的Record类,而非JDK自带的java.lang.Character。

额外验证点

确保你的ObjectMapper版本支持Java Record(Jackson 2.12+默认支持,旧版本需添加jackson-modules-java8依赖并启用相关模块)。

内容的提问来源于stack exchange,提问作者Alejandro Castellanos

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.23 19:19:56