jackson.databind.exc.MismatchedInputException:无法反序列化java.lang.String的实例

时间:2017-10-03 05:35:52

标签: java hashmap jackson yaml

我有一个我想读入Map的yaml文件:

events:
  key1: val1
  key2: val2
  key3: val3


public class EventGenerator {    
  private Map<String, String> events;

  public Map<String, String> getEvents() {
    return this.events;
  }

  public void setEvents() {
    ObjectMapper mapper = new ObjectMapper(new YAMLFactory());
        try {
            FileInputStream fis = new FileInputStream("file.yaml");
            EventGenerator eventGenerator = mapper.readValue(fis, EventGenerator.class);
            fis.close();
            System.out.print(eventGenerator.getEvents());
        } catch (IOException e) {
            e.printStackTrace();
        }

  }

}

这段代码工作正常。但是当我将yaml文件的路径作为String参数传递时

public void setEvents(String filePath) {
// same code
FileInputStream fis = new FileInputStream(filePath)
// same code
}

我得到了一个例外

jackson.databind.exc.MismatchedInputException: Cannot deserialize instance of java.lang.String

任何人都可以解释这种行为吗?我在这里做错了什么?

1 个答案:

答案 0 :(得分:0)

解决了这个问题。 Setter方法必须遵循严格的POJO标准,即setEvents(Map events) {this.events = events};,并且必须采用另一种方法进行去异化。