无法将 json 转换为 pojo class,出现 com.fasterxml.jackson.databind.exc.UnrecognizedPropertyException 异常
Not able to convert json to pojo class, getting com.fasterxml.jackson.databind.exc.UnrecognizedPropertyException exception
这是我的 JsonObject
JSONObject input = new JSONObject("{\n" +
" \"ColumnNames\":[\"col1\", \"col2\", \"col3\", \"col4\", \"col5\"]\n" +
"}");
我的 POJO Class
public class RequestClass {
private List<String> ColumnNames;
public void setColumnNames(List<String> ColumnNames) {
this.ColumnNames = ColumnNames;
}
public List<String> getColumnNames() {
return this.ColumnNames;
}
}
尝试在 ObjectMapper 的帮助下将 JsonObject 转换为 pojo class 对象,如下所示 -
ObjectMapper mapper = new ObjectMapper();
//mapper.disable(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES);
RequestClass request = null;
try {
request = mapper.readValue(input.toString(), RequestClass.class);
} catch (Exception e) {
e.printStackTrace();
}
在输出中获取异常
com.fasterxml.jackson.databind.exc.UnrecognizedPropertyException: Unrecognized field "ColumnNames" (class RequestClass), not marked as ignorable (one known property: "columnNames"])
at [Source: {"ColumnNames":["col1","col2","col3","col4","col5"]}; line: 1, column: 17] (through reference chain: RequestClass["ColumnNames"])
查看 pojo 中的异常,您提到了 ColumnNames
并且在 json 中您提到了 columnNames
(大小写不匹配),尽管您已经定义它在上面的 json 示例中是正确的。请检查字段名是否大小写不匹配
名字叫ColumnNames
的私有属性其实是无关紧要的。 属性 是通过内省找到的,查看 getters 和 setters。按照惯例,如果您有名为 getColumnNames
和 setColumnNames
的方法,它们会定义一个名为 columnNames
(小写 c
)的 属性。
所以你有两个选择:
- 将 JSON 中的 属性 的名称更改为
columnNames
,或
- 使用注释覆盖默认的内省行为。
后者是在getter和setter上使用@JsonProperty实现的,如下:
@JsonProperty("ColumnNames")
public List<String> getColumnNames() {
return this.ColumnNames;
}
这是我的 JsonObject
JSONObject input = new JSONObject("{\n" +
" \"ColumnNames\":[\"col1\", \"col2\", \"col3\", \"col4\", \"col5\"]\n" +
"}");
我的 POJO Class
public class RequestClass {
private List<String> ColumnNames;
public void setColumnNames(List<String> ColumnNames) {
this.ColumnNames = ColumnNames;
}
public List<String> getColumnNames() {
return this.ColumnNames;
}
}
尝试在 ObjectMapper 的帮助下将 JsonObject 转换为 pojo class 对象,如下所示 -
ObjectMapper mapper = new ObjectMapper();
//mapper.disable(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES);
RequestClass request = null;
try {
request = mapper.readValue(input.toString(), RequestClass.class);
} catch (Exception e) {
e.printStackTrace();
}
在输出中获取异常
com.fasterxml.jackson.databind.exc.UnrecognizedPropertyException: Unrecognized field "ColumnNames" (class RequestClass), not marked as ignorable (one known property: "columnNames"])
at [Source: {"ColumnNames":["col1","col2","col3","col4","col5"]}; line: 1, column: 17] (through reference chain: RequestClass["ColumnNames"])
查看 pojo 中的异常,您提到了 ColumnNames
并且在 json 中您提到了 columnNames
(大小写不匹配),尽管您已经定义它在上面的 json 示例中是正确的。请检查字段名是否大小写不匹配
名字叫ColumnNames
的私有属性其实是无关紧要的。 属性 是通过内省找到的,查看 getters 和 setters。按照惯例,如果您有名为 getColumnNames
和 setColumnNames
的方法,它们会定义一个名为 columnNames
(小写 c
)的 属性。
所以你有两个选择:
- 将 JSON 中的 属性 的名称更改为
columnNames
,或 - 使用注释覆盖默认的内省行为。
后者是在getter和setter上使用@JsonProperty实现的,如下:
@JsonProperty("ColumnNames")
public List<String> getColumnNames() {
return this.ColumnNames;
}