json - 使用 Jackson JSON View 而不注释原始 bean 类

标签 json spring spring-mvc jackson

有没有什么方法可以让我使用 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/

相关文章:

java - 为什么 SpringSecurity 在注销后继续提供相同的经过身份验证的主体

Spring Boot 2 公共(public)客户端授权服务器 (PKCE)

php - mysql子查询中的LIMIT

java - 在 Android 上使用超链接 API 的最佳方式是什么?

javascript - 将嵌套列表写成结构化 JSON

java - Spring 启动: configure hsqldb datasource to persist data

javascript - 单击单选按钮时,我想用 Ajax 调用 Spring MVC 的 Controller

java - CallableStatement.close() 会导致性能问题

hibernate - 要映射没有主键的数据库 View ,在 hibernate xml 映射中

json - 当值为整数时,无法将小数部分显示为 .0