反序列化 属性 包含 Jackson 点的文件
Deserialize property file that contains dot with Jackson
在我们的应用程序中,我们尝试使用 Jackson 读取一个平面 属性 文件,以将属性与我们的 POJO 相匹配
一切正常,但是当 属性 名称包含一些点时,整个 POJO 设置为 null
这是 属性 文件的示例
p.test=Just a test
这是我的 POJO
public class BasicPOJO {
@JsonProperty("p.test")
private String test;
public String getTest() {
return test;
}
public void setTest(String test) {
this.test = test;
}
}
这是我的映射方式
InputStream in = ApplicationProperties.class.getClassLoader()
.getResourceAsStream("application.properties");
JavaPropsMapper mapper = new JavaPropsMapper();
try {
BasicPOJO myProperties = mapper.readValue(in,
BasicPOJO .class);
LOGGER.debug("Loaded properties {}", myProperties); //myProperties.test is null here
} catch (IOException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
}
任何帮助将不胜感激
属性 名称中的点用于表示嵌套对象。
这在这里描述
https://github.com/FasterXML/jackson-dataformats-text/blob/master/properties/README.md#basics-of-conversion
Since default java.util.Properties can read "flat" key/value entries in, what is the big deal here?
Most properties files actually use an implied structure by using a naming convention; most commonly by using period ('.') as logical path separator.
使用 JavaPropsSchema.withoutPathSeparator()
禁用它
JavaPropsSchema schema = JavaPropsSchema.emptySchema()
.withoutPathSeparator();
BasicPOJO myProperties = mapper.readerFor(BasicPOJO.class)
.with(schema)
.readValue(source);
在我们的应用程序中,我们尝试使用 Jackson 读取一个平面 属性 文件,以将属性与我们的 POJO 相匹配 一切正常,但是当 属性 名称包含一些点时,整个 POJO 设置为 null
这是 属性 文件的示例
p.test=Just a test
这是我的 POJO
public class BasicPOJO {
@JsonProperty("p.test")
private String test;
public String getTest() {
return test;
}
public void setTest(String test) {
this.test = test;
}
}
这是我的映射方式
InputStream in = ApplicationProperties.class.getClassLoader()
.getResourceAsStream("application.properties");
JavaPropsMapper mapper = new JavaPropsMapper();
try {
BasicPOJO myProperties = mapper.readValue(in,
BasicPOJO .class);
LOGGER.debug("Loaded properties {}", myProperties); //myProperties.test is null here
} catch (IOException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
}
任何帮助将不胜感激
属性 名称中的点用于表示嵌套对象。 这在这里描述 https://github.com/FasterXML/jackson-dataformats-text/blob/master/properties/README.md#basics-of-conversion
使用Since default java.util.Properties can read "flat" key/value entries in, what is the big deal here?
Most properties files actually use an implied structure by using a naming convention; most commonly by using period ('.') as logical path separator.
JavaPropsSchema.withoutPathSeparator()
禁用它
JavaPropsSchema schema = JavaPropsSchema.emptySchema()
.withoutPathSeparator();
BasicPOJO myProperties = mapper.readerFor(BasicPOJO.class)
.with(schema)
.readValue(source);