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

SpringBoot对接Mongo时反序列化报错Cannot construct instance of City如何解决

问题原因

该报错是接口接收JSON参数时,Jackson反序列化框架无法实例化不可变类City导致,问题出在HTTP请求转Java对象的阶段,和MongoDB存储逻辑无关。
你的City类只有一个带name参数的构造器,Jackson默认无法识别构造参数和JSON字段的对应关系,因此无法完成实例化。

解决方案

以下任意一种方案均可解决问题:

方案1:给构造器添加参数映射注解

直接在City的构造器上添加@ConstructorProperties注解,指定构造参数对应的字段名:

import java.beans.ConstructorProperties;

public class City {
    public final String name;

    @ConstructorProperties("name")
    public City(String name) {
        this.name = name;
    }

    // 原有toString方法保持不变
}

方案2:使用Jackson序列化注解标注构造器

用@JsonCreator和@JsonProperty明确告诉Jackson构造器的参数对应关系:

import com.fasterxml.jackson.annotation.JsonCreator;
import com.fasterxml.jackson.annotation.JsonProperty;

public class City {
    public final String name;

    @JsonCreator
    public City(@JsonProperty("name") String name) {
        this.name = name;
    }

    // 原有toString方法保持不变
}

方案3:使用Lombok简化不可变类定义

如果项目引入了Lombok,直接给City类添加@Value注解,Lombok会自动生成符合Jackson反序列化要求的结构,无需手动写构造、toString等方法:

import lombok.Value;

@Value
public class City {
    String name;
}

额外注意事项

你Postman提交的JSON存在语法错误:imageId字段后多余逗号,且多了一层闭合大括号,修正后的正确格式如下:

{
  "city": {
    "name": "Atena"
  },
  "imageId": "Doe"
}

请先修正JSON格式再测试,避免额外的解析错误。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.30 23:36:05