【问题标题】:Facing weird problem while trying to convert JSON string into JavaPOJO尝试将 JSON 字符串转换为 JavaPOJO 时遇到奇怪的问题
【发布时间】:2019-07-23 20:54:33
【问题描述】:

Maven 依赖 - Eclipse IDE

<!-- https://mvnrepository.com/artifact/com.fasterxml.jackson.core/jackson-databind -->
        <dependency>
                <groupId>com.fasterxml.jackson.core</groupId>
                <artifactId>jackson-databind</artifactId>
                <version>2.9.8</version>
        </dependency>

没有任何注释,我得到

控制台错误

com.fasterxml.jackson.databind.exc.UnrecognizedPropertyException:无法识别的字段“id”(com.optimight.prakash.general.Employee 类),未标记为可忽略(0 个已知属性:]) 在 [Source: (String)"{"id":1,"name":"Lokesh Gupta","age":34,"location":"India"}";行:1,列:8](通过参考链:com.optimight.prakash.general.Employee["id"]) 在 com.fasterxml.jackson.databind.exc.UnrecognizedPropertyException.from(UnrecognizedPropertyException.java:61) 在 com.fasterxml.jackson.databind.DeserializationContext.handleUnknownProperty(DeserializationContext.java:823) 在 com.fasterxml.jackson.databind.deser.std.StdDeserializer.handleUnknownProperty(StdDeserializer.java:1153) 在 com.fasterxml.jackson.databind.deser.BeanDeserializerBase.handleUnknownProperty(BeanDeserializerBase.java:1589) 在 com.fasterxml.jackson.databind.deser.BeanDeserializerBase.handleUnknownVanilla(BeanDeserializerBase.java:1567) 在 com.fasterxml.jackson.databind.deser.BeanDeserializer.vanillaDeserialize(BeanDeserializer.java:294) 在 com.fasterxml.jackson.databind.deser.BeanDeserializer.deserialize(BeanDeserializer.java:151) 在 com.fasterxml.jackson.databind.ObjectMapper._readMapAndClose(ObjectMapper.java:4013) 在 com.fasterxml.jackson.databind.ObjectMapper.readValue(ObjectMapper.java:3004) 在 com.optimight.prakash.general.JSONtoJavaPOJO.main(JSONtoJavaPOJO.java:18)

带注释:@JsonIgnoreProperties(ignoreUnknown = true)

在 Employe Class 中,然后我得到

员工 [id=null, name=null, age=null, location=null]

应用程序类 - 主要方法

    import java.io.IOException;
    import com.fasterxml.jackson.core.JsonGenerationException;
    import com.fasterxml.jackson.databind.JsonMappingException;
    import com.fasterxml.jackson.databind.ObjectMapper;

public class JSONtoJavaPOJO {
public static void main(String[] args) {
    String json = "{\"id\":1,\"name\":\"Lokesh Gupta\",\"age\":34,\"location\":\"India\"}";

    ObjectMapper mapper = new ObjectMapper();
    try
    {
        Employee emp = mapper.readValue(json, Employee.class);

        System.out.println(emp);
    }
    catch (JsonGenerationException e)
    {
        e.printStackTrace();
    } catch (JsonMappingException e) {
        e.printStackTrace();
    } catch (IOException e) {
        e.printStackTrace();
    }
}

}

员工类

import com.fasterxml.jackson.annotation.JsonIgnoreProperties;



//@JsonIgnoreProperties(ignoreUnknown = true)
public class Employee
{
    private Integer id;
    private String name;
    private Integer age;
    private String location;



    public Employee() {
    }


    public Employee(Integer id, String name, Integer age, String location) {
        super();
        this.id = id;
        this.name = name;
        this.age = age;
        this.location = location;
    }



    @Override
    public String toString() {
        return "Employee [id=" + id + ", name=" + name + ", age=" + age
                + ", location=" + location + "]";
    }
}

【问题讨论】:

  • 你的Employee 类中没有setter 或getter 吗?您如何通过私有成员而不是 getter 来获取数据?无论如何,我怀疑杰克逊正在使用无参数构造函数来实例化您的对象,然后由于没有设置器而无法设置任何值。尝试添加设置器,看看是否能解决问题。
  • @Jordan 添加了二传手;问题解决了。

标签: java json pojo


【解决方案1】:

将 setter 和 getter 添加到您的 Employee 类。

【讨论】:

    【解决方案2】:

    您可以使用项目 lombok 来添加 setter 和 getter。最终的 Employee 类将如下所示。

    @Data
    @NoArgsConstructor
    @AllArgsConstructor
    @ToString
    public class Employee
    {
        private Integer id;
        private String name;
        private Integer age;
        private String location;
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-08-05
      • 1970-01-01
      • 1970-01-01
      • 2020-06-25
      • 2022-01-08
      • 1970-01-01
      相关资源
      最近更新 更多