尝试将 JSON 字符串转换为 JavaPOJO 时遇到奇怪的问题
Facing weird problem while trying to convert JSON string into JavaPOJO
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" (class com.optimight.prakash.general.Employee),未标记为可忽略(0 个已知属性:])
在[来源:(字符串)”{"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]
应用程序Class - 主要方法
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();
}
}
}
员工Class
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 + "]";
}
}
为您的员工添加 setter 和 getter class。
您可以使用项目 lombok 添加 setter 和 getter。最终员工 class 会看起来像这样。
@Data
@NoArgsConstructor
@AllArgsConstructor
@ToString
public class Employee
{
private Integer id;
private String name;
private Integer age;
private String location;
}
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" (class com.optimight.prakash.general.Employee),未标记为可忽略(0 个已知属性:]) 在[来源:(字符串)”{"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]
应用程序Class - 主要方法
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();
}
}
}
员工Class
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 + "]";
}
}
为您的员工添加 setter 和 getter class。
您可以使用项目 lombok 添加 setter 和 getter。最终员工 class 会看起来像这样。
@Data
@NoArgsConstructor
@AllArgsConstructor
@ToString
public class Employee
{
private Integer id;
private String name;
private Integer age;
private String location;
}