内部类的自定义杰克逊映射

时间:2011-07-06 12:36:43

标签: json spring-mvc mapping jackson

我正在开发一个使用Jackson进行JSON视图的Spring MVC应用程序。 假设我有两个类如下。

class A {
   String prop;
   B other;
   // getters setters
}

class B {
   Integer id;
   String name;
}

我想要解决的是获取如下的JSON字符串。 对于完全初始化的A

实例
{prop:"something", name:"otherthing"} // in here the class B 
                                      // is replaced with its propery name

insted of

{prop:"something, other:{id:5,name:"otherthing"}}

注意:上面提到的两个类是Hibernate的实体类。 我已经使用@JsonIgnore消除了JSON输出中的一些属性,它是否可行 使用注释替换子类及其属性?

2 个答案:

答案 0 :(得分:2)

除了使用自定义序列化程序之外,这是不可能的,尽管有一个功能请求(http://jira.codehaus.org/browse/JACKSON-132)可能会在Jackson 1.9中出现(因为它具有相对较高的投票数,这意味着一些用户会非常喜欢看它实施了。)

答案 1 :(得分:0)

如果您能够使用Jackson以外的库进行JSON序列化,那么您可以将GSON(http://code.google.com/p/google-gson/)与自定义GsonBuilder对象一起使用,可能会让你接近你想要实现的目标。

如果您查看此blog post,它会以几种不同的方式展示如何自定义GSON序列化程序。我正在使用自定义ExclusionStrategy将我的模型对象(其中包含循环引用)正确地转换为使用Spring MVC的RESTful Web服务的JSON。 (请注意,我只是用它来序列化,而不是反序列化。)

我已经在不同的View bean中设置了我的GsonBuilder,你可以看到here。如果看起来它可以帮到你,你有任何问题,请告诉我。