Вы не предоставили пример того, как вы используете аннотацию @JsonValue
, поэтому я мог что-то пропустить, но в любом случае.
При сериализации я думаю, что вы делаете что-то вроде:
ClassContainingMap ccm = new ClassContainingMap();
ccm.getMap().put("key1", "value1");
ccm.getMap().put("key2", "value2");
System.out.println(om.writeValueAsString(ccm));
Это сработает и даст следующий JSON:
{
"map": {
"key1":"value1",
"key2":"value2",
}
}
Но это не равно структуре JSON, которую вы хотите прочитать ClassContainingMap
:
{
"key1": "value1",
"key2": "value2"
}
А именно, первые - это данные ClassContainingMap
, а вторые - "только" Map
, которые, я думаю, вы хотите заполнить внутри ClassContainingMap
.
У вас есть два варианта для проверки, вы можете;
- используйте правильную структуру JSON в качестве источника, соответствующего
ClassContainingMap
просто десериализовать это на простую карту, например:
Map map = om.readValue(i, Map.class);
и, если возможно что-либо из вышеперечисленного, можно сделать это с помощью @JsonCreator
@JsonCreator(mode=Mode.DELEGATING)
public ClassContainingMap(@JsonProperty("map")Map<String,String> map) {
this.map = map;
}
@JsonValue
public Map<String, String> getMap() {
return map;
}
См. Дополнительную информацию о 3-м примере, например здесь