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

带Spring的JSON键值对列表的Java等价实现及JSON有效性疑问

解决Spring中JSON键值对列表的Java实现及someList为null问题

嘿,咱们一步步来搞定你的问题!

第一步:先确认JSON格式合法性

假设你要处理的JSON是类似下面这种键值对列表的结构:

{
"someList": [
{"key": "username", "value": "jarosik"},
{"key": "email", "value": "jarosik@example.com"}
]
}
这种格式是完全合法的——它是标准的JSON对象,包含名为someList的数组字段,数组内每个元素都是带key和value的键值对对象。如果你的JSON结构和这个类似,格式上没问题。

第二步:对应的Java等价实现

在Spring中,我们通常用Jackson处理JSON序列化/反序列化,下面是对应的实体类实现:

1. 单个键值对的映射类

public class KeyValuePair {
    private String key;
    private String value;

    // 必须要有公共无参构造器!Jackson反序列化依赖它
    public KeyValuePair() {}

    // 可选:全参构造器,方便手动创建对象
    public KeyValuePair(String key, String value) {
        this.key = key;
        this.value = value;
    }

    // 必须要有getter和setter!Jackson需要通过它们访问属性
    public String getKey() {
        return key;
    }

    public void setKey(String key) {
        this.key = key;
    }

    public String getValue() {
        return value;
    }

    public void setValue(String value) {
        this.value = value;
    }
}

2. 包含列表的父实体类

import java.util.List;

public class YourRequestModel {
    private List<KeyValuePair> someList;

    // 同样需要无参构造器
    public YourRequestModel() {}

    // getter和setter不能少
    public List<KeyValuePair> getSomeList() {
        return someList;
    }

    public void setSomeList(List<KeyValuePair> someList) {
        this.someList = someList;
    }
}

用Lombok简化代码(推荐)

如果你的项目用了Lombok,@Data注解可以自动生成无参构造、getter、setter等代码,简化成:

import lombok.Data;
import java.util.List;

@Data
public class YourRequestModel {
    private List<KeyValuePair> someList;
}

@Data
public class KeyValuePair {
    private String key;
    private String value;
}

第三步:解决someList始终为null的问题

代码没报错但someList一直是null,大概率是这几个原因:

  • 字段名不匹配:JSON字段名和Java属性名大小写/拼写不一致(比如JSON是somelist但Java是someList),可以用@JsonProperty注解指定对应关系:
    @JsonProperty("somelist") // 对应JSON里的字段名
    private List<KeyValuePair> someList;
    
  • 缺少无参构造器:Jackson反序列化必须依赖实体类的公共无参构造器,如果你只写了全参构造器,一定要补上无参的。
  • 请求Content-Type不对:如果是POST请求,要确保请求头的Content-Type是application/json,否则Spring不会用Jackson解析请求体。
  • JSON格式隐性错误:比如数组括号不匹配、字段名漏写引号,这种情况可能不报错,但Jackson无法正确解析,导致列表为null。可以用在线JSON校验工具检查格式。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.19 08:25:32