基本上我有一些我希望序列化为JSON的Java对象尽可能少头疼。现在我正在使用Tomcat,Jersey和Genson。
我发现像Genson这样的东西不起作用(当然这是玩具的例子):
public class Main {
public static void main(String[] args) {
MyClass mc = new MyClass();
mc.mapOfSets = new HashMap<>();
Set<String> set0 = new HashSet<>();
set0.add("0");
Set<String> set1 = new HashSet<>();
set1.add("1");
set1.add("11");
Set<String> set2 = new HashSet<>();
set2.add("2");
set2.add("22");
set2.add("222");
mc.mapOfSets.put("set0", set0);
mc.mapOfSets.put("set1", set1);
mc.mapOfSets.put("set2", set2);
try {
String json1 = new Genson().serialize(mc.mapOfSets);
System.out.println(json1);
String json = new Genson().serialize(mc);
System.out.println(json);
} catch (TransformationException | IOException e) {
e.printStackTrace();
}
}
}
class MyClass {
public Map<String, Set<String>> mapOfSets;
}
以上的输出是:
{"set1":["1","11"],"set0":["0"],"set2":["2","222","22"]}
{"mapOfSets":{"empty":false}}
Genson的好处是我把它放在我的WebContent文件夹中,而不是与泽西捆绑在一起的东西 - 不需要额外的配置。如果有一个非常直接的方法来获得像上面这样的对象序列化到JSON而不必为每个模式编写某种转换器,我很乐意用它来代替Jersey而不是Genson,但Genson并没有让我失望远远不够。
那么 - 我如何按摩Genson以正确序列化 - 或者什么是无痛地处理这类事情的图书馆?
谢谢!
答案 0 :(得分:2)
我是Gensons的作者。我刚检查过,这是一个bug,除了这个特殊情况外,Genson中的泛型工作正常... 如果你可以等到明天,我今晚将推出一个包含修复程序的新版本以及一些小的新功能。完成后我会更新我的答案。
编辑更正错误并将0.94推送到公共maven repo,它应该在最多几个小时内可用。以下是一些changes in this release。请尝试并确认它是否解决了您的问题。谢谢:))
答案 1 :(得分:0)
我正在使用Guice来处理我的依赖注入需求,这就是为什么我很难让Jackson与我的Jersey项目集成。由于Genson没有做我想做的事情,所以我决定再次尝试杰克逊。我尝试改变一些事情直到它起作用,在SO和Google上尝试不同的建议。
现在,以下内容在我的Sandbox项目中提供了预期的输出:
ObjectMapper mapper = new ObjectMapper();
AnnotationIntrospector introspector = new JaxbAnnotationIntrospector();
mapper.getSerializationConfig().setAnnotationIntrospector(introspector);
String jsonData = mapper.writeValueAsString(mc);
System.out.println(jsonData);
{"mapOfSets":{"set1":["1","11"],"set0":["0"],"set2":["2","222","22"]}}