有没有什么方法可以让我使用 Jackson JSON Views 或类似的东西,而不必注释原始的 bean 类?我正在寻找某种运行时/动态配置来让我做类似的事情。
我的 bean 是一个打包在 JAR 中的 @Entity
,可以由多个项目共享。由于使用项目中的 UI 发生变化,我试图避免接触和重新打包共享 JAR。
理想情况下我想做类似的事情
jsonViewBuilder = createViewBuilder(View.class);
jsonViewBuilder.addProperty("property1");
jsonViewBuilder.addProperty("property2");
替换
Bean {
@JsonView(View.class)
String property1;
@JsonView(View.class)
String property2;
}
有什么想法吗?
底层环境:Spring 3.0、Spring MVC 和 Glassfish 3.1.1。
最佳答案
使用混合功能怎么样?
http://wiki.fasterxml.com/JacksonMixInAnnotations
http://www.cowtowncoder.com/blog/archives/2009/08/entry_305.html
<小时/>import org.codehaus.jackson.annotate.JsonAutoDetect.Visibility;
import org.codehaus.jackson.annotate.JsonMethod;
import org.codehaus.jackson.map.ObjectMapper;
import org.codehaus.jackson.map.SerializationConfig;
import org.codehaus.jackson.map.annotate.JsonView;
public class JacksonFoo
{
public static void main(String[] args) throws Exception
{
ObjectMapper mapper = new ObjectMapper().setVisibility(JsonMethod.FIELD, Visibility.ANY)
.configure(SerializationConfig.Feature.DEFAULT_VIEW_INCLUSION, false);
mapper.getSerializationConfig().addMixInAnnotations(Bar.class, BarMixIn.class);
mapper.setSerializationConfig(mapper.getSerializationConfig().withView(Expose.class));
System.out.println(mapper.writeValueAsString(new Bar()));
// output: {"b":"B"}
}
}
class Bar
{
String a = "A";
String b = "B";
}
abstract class BarMixIn
{
@JsonView(Expose.class)
String b;
}
// Used only as JsonView marker.
// Could use any existing class, like Object, instead.
class Expose {}
关于json - 使用 Jackson JSON View 而不注释原始 bean 类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8475980/