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

Jackson JSON解析返回null值问题,请求正确解析方法

解决Jackson解析JSON返回null的问题

问题原因

Jackson默认遵循JavaBean命名规范,会将getFName()这类方法解析为对应的属性名fName(首字母小写),但你的JSON中对应的键是FName(首字母大写),两者无法匹配,导致Jackson无法将JSON值映射到Employee类的字段,最终输出null。另外setRole方法的参数为小写role,与字段Role的大小写不一致,也可能影响该字段的映射。

解决方案

方案一:用@JsonProperty注解指定字段对应JSON键名

在Employee类的每个字段上添加@JsonProperty注解,明确指定JSON中的键名,让Jackson精准匹配:

package Models;

import com.fasterxml.jackson.annotation.JsonProperty;

public class Employee {
    @JsonProperty("id")
    private int id;
    @JsonProperty("FName")
    private String FName;
    @JsonProperty("LName")
    private String LName;
    @JsonProperty("Role")
    private String Role;

    public int getId() {
        return id;
    }

    public void setId(int id) {
        this.id = id;
    }

    public String getFName() {
        return FName;
    }

    public void setFName(String FName) {
        this.FName = FName;
    }

    public String getLName() {
        return LName;
    }

    public void setLName(String LName) {
        this.LName = LName;
    }

    public String getRole() {
        return Role;
    }

    public void setRole(String role) {
        this.Role = role;
    }
}

方案二:修改Jackson命名策略,匹配JSON的大小写

在创建ObjectMapper时,设置命名策略为UPPER_CAMEL_CASE,让Jackson直接匹配JSON中的大驼峰键名:

import Models.Employee;
import com.fasterxml.jackson.databind.DeserializationFeature;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.fasterxml.jackson.databind.PropertyNamingStrategy;
import org.testng.annotations.Test;

import java.io.File;
import java.io.IOException;

public class TestDataBinding {
    @Test
    public void TestDataBinding() throws IOException {
        ObjectMapper map = new ObjectMapper();
        map.disable(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES);
        // 设置命名策略为大驼峰,匹配JSON键名
        map.setPropertyNamingStrategy(PropertyNamingStrategy.UPPER_CAMEL_CASE);
        Employee emp = map.readValue(new File("src/main/resources/Data/Employees.json"), Employee.class);
        System.out.println(emp.getFName());
        System.out.println(emp.getLName());
    }
}

方案三:修正setter方法的参数名(规范代码)

将setRole方法的参数名改为与字段一致的Role,避免因参数名大小写不一致导致的潜在问题:

public void setRole(String Role) {
    this.Role = Role;
}

验证

修改完成后重新运行TestDataBinding测试,即可正确输出:

Rayan
Philip

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.20 10:57:34