反序列化 属性 包含 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.

您可以按照此处 https://github.com/FasterXML/jackson-dataformats-text/blob/master/properties/README.md#javapropsschemapathseparator

使用 JavaPropsSchema.withoutPathSeparator() 禁用它
JavaPropsSchema schema = JavaPropsSchema.emptySchema()
    .withoutPathSeparator();
BasicPOJO myProperties = mapper.readerFor(BasicPOJO.class)
    .with(schema)
    .readValue(source);