【发布时间】:2018-02-20 14:27:55
【问题描述】:
在我们的应用程序中,我们尝试使用 Jackson 读取平面属性文件,以将属性与我们的 POJO 匹配。属性文件包含一个列表,但似乎已反序列化为单个字符串。
这是我得到的错误:“Cannot deserialize instance of java.util.ArrayList out of VALUE_STRING token”
这是输入文件的样子
test=Just a test
status=A, B, C
也试过了
status=[A, B, C]
status=["A", "B", "C"]
这是我们的 POJO
@JsonIgnoreProperties(ignoreUnknown = true)
public class BasicPOJO {
@JsonProperty("status")
List<String> status;
@JsonProperty("test")
String test;
//Getter and setter ..
}
这就是我们的映射方式
public void test1() {
// Read configuration file from classpath
InputStream in = WMSApplicationProperties.class.getClassLoader()
.getResourceAsStream("application.properties");
LOGGER.debug("Reading with JSON layout");
JavaPropsMapper mapper = new JavaPropsMapper();
try {
JavaPropsSchema schema = JavaPropsSchema.emptySchema()
.withoutPathSeparator();
BasicPOJO myProperties = mapper.readerFor(BasicPOJO.class)
.with(schema)
.readValue(in);
} catch (IOException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
}
}
知道为什么列表被视为字符串 任何帮助将不胜感激
【问题讨论】:
-
您的 JSON 属性文件应如下所示:
{ "status" : [ "A", "B", "C" ] } -
它不是 JSON 属性文件,它是一个经典的属性文件(不幸的是我无法更改)。所以格式是property=value
-
如果是这样,您的
BasicPOJO将不起作用。您的status属性应该包含 JSON 对象还是仅包含列表? -
我的 status 属性应该包含一个逗号分隔值的列表,我希望它在反序列化时会被转换为一个列表
-
你为什么不使用基本的String split(...) 来代替?您显然不为此使用 JSON 解析器。