当前位置: 首页 > 知识库问答 >
问题:

我如何排除Jackson不使用注释的字段?

严柏
2023-03-14

我已经尝试创建自定义序列化程序,但我无法在那里获得字段名。

在GSON中,我使用了exclusionstrategy,但Jackson没有这样的功能。有对等的吗?

共有1个答案

上官扬
2023-03-14

下面通过名称排除字段的示例来自我的博客文章,Gson v Jackson-Part 4。(搜索PropertyFilterMixin。)此示例演示使用FilterProviderSimpleBeanPropertyFilterSerializeAllexCept用户指定的字段名列表。

@JsonFilter("filter properties by name")  
class PropertyFilterMixIn {}  

class Bar  
{  
  public String id = "42";  
  public String name = "Fred";  
  public String color = "blue";  
  public Foo foo = new Foo();  
}  

class Foo  
{  
  public String id = "99";  
  public String size = "big";  
  public String height = "tall";  
}  

public class JacksonFoo  
{  
  public static void main(String[] args) throws Exception  
  {  
    ObjectMapper mapper = new ObjectMapper();  
    mapper.getSerializationConfig().addMixInAnnotations(  
        Object.class, PropertyFilterMixIn.class);  

    String[] ignorableFieldNames = { "id", "color" };  
    FilterProvider filters = new SimpleFilterProvider()  
      .addFilter("filter properties by name",   
          SimpleBeanPropertyFilter.serializeAllExcept(  
              ignorableFieldNames));  
    ObjectWriter writer = mapper.writer(filters);  

    System.out.println(writer.writeValueAsString(new Bar()));  
    // output:  
    // {"name":"James","foo":{"size":"big","height":"tall"}}  
  }  
} 

(注意:相关的API可能在最近的Jackson版本中略有改变。)

虽然该示例确实使用了一个看似不必要的注释,但该注释并未应用于要排除的字段。(为了帮助修改API以简化必要的配置,请毫不犹豫地投票支持实施Jackson-274号。

 类似资料:
  • 问题内容: 我有一个包含一些字段的Bean,并且其中两个不打算由hibernate模式映射(errorStatus和operationResultMessage)。我如何(通过注释)告诉Hibernate我不想映射这些字段? Bean中的映射表没有字段:errorStatus和operationResultMessage 提前致谢。 代码如下所示: **吸气剂和二传手被忽略! 问题答案: 使用注释

  • Jackson可以将JSON数据反序列化为不可变的对象。但是默认情况下,必须使用或指定构造函数或静态工厂方法参数。我如何配置Jackson和编译器,以便不需要这些注释?当使用Spring Boot时,我如何最好地配置这些?

  • 我正在调用一个API,它返回一个转换为 列表项。 我已经查看了< code>@JsonInclude,但这适用于< code>null属性,而不适用于< code>null集合项。 编辑 值显示为null的原因是因为选项< code >反序列化功能。正在使用READ _ UNKNOWN _ ENUM _ VALUES _ AS _ NULL 。

  • 问题内容: 我要呼吁汇率第三方API,但JSON返回不断变化,如果我申请到的转换,它将返回我:,所以如果我的要求来,它将返回我。 我将不得不使用将返回的结果映射到pojo中,是否有任何可行的方法? 我当前的硬编码解决方法: 问题答案: 是具有值的字段的对象。 否是with键/值对。 两者都是正确的,但是由于before的值是动态的(变化的),因此它是您需要的第二种解释。 因此,请勿要求将JSON转

  • 我有一个带有Jackson注释的POJO 因此,当Jackson库被其他框架(如RestEasy)用于自动编组时,这些注释有助于指导序列化和反序列化过程。

  • 问题内容: 我正在杰克逊1.6.2中使用REST Web服务/ ApacheWink。我如何注释枚举字段,以便Jackson对其进行反序列化? 内部阶层 Jackson的文档指出可以通过@JsonValue/来做到这一点,@JsonCreator但没有提供示例。 是否有人愿意像往常一样洒(java)bean? 问题答案: 如果您使用的是Jackson 1.9,则可以通过以下方式完成序列化: 因此,