使用JSF在杰克逊地图内部映射

时间:2017-06-29 08:16:06

标签: java json dictionary jsf jackson

我使用Jackson从/向json文件读取/写入数据,我遇到了用户POJO的问题。它有一个Map应该是联系用户的方式(所以它可以有0到7,具体取决于Enum)。我希望能够使用JSF中的表单设置联系方式。

我试过value="#{config.user.contacts[EMAIL_PRO]}"之类的东西 当然EMAIL_PRO是一个Enum(后来,用户应该能够自己选择Enum,但是现在我尝试简单)。 但是当我这样做时,错误是

  

JSON中不允许使用地图的空键

我明白了,因为我的调试说返回的值是{null = null}。现在第一个问题:由于地图是空的,JSF应该像那样工作吗?关键" EMAIL_PRO"还没有存在,但JSF不应该为我完成工作,并用密钥输入正确的值吗?

另一个问题是关于杰克逊和地图的更多问题。正如我所说,我的POJO用户包含一个Map,而json文件是一个Map本身(包含多个用户)。

是否真的可以使用杰克逊将地图写入此文件,其中地图为Map<String, Object>而对象包含Map<Enum, Object>?如果是的话,怎么样?

感谢您的帮助

PS:我不能改变我的API或我的POJO。

1 个答案:

答案 0 :(得分:0)

我认为这是一个重复的帖子,请参阅How to convert hashmap to JSON object in Java

正如其中一个回复所说:

Map<String, Object> data = new HashMap<String, Object>();
data.put( "name", "Mars" );
data.put( "age", 32 );
data.put( "city", "NY" );
JSONObject json = new JSONObject();
json.putAll( data );
System.out.printf( "JSON: %s", json.toString(2) );

输出:

JSON: {
  "age": 32,
  "name": "Mars",
  "city": "NY"
}

您也可以尝试使用Google的GSON.Google的GSON是将Java对象转换为JSON表示的最佳库