当前位置: 首页 > 面试题库 >

创建一个自定义的Jackson注释

阴培
2023-03-14
问题内容

一个项目需要大量使用以下Jackson注释组合。因此,有没有一种方法可以创建另一个注释来避免丑陋的复制/粘贴:

public class A {
    @JsonProperty("_id")
    @JsonSerialize(using=IdSerializer.class)
    @JsonDeserialize(using=IdDeserializer.class)
    String id;
}

public class B {
    @JsonProperty("_id")
    @JsonSerialize(using=IdSerializer.class)
    @JsonDeserialize(using=IdDeserializer.class)
    String id;
}

public class C {
    @CustomId // don't repeat that configuration endlessly
    String id;
}

更新: 我已经尝试过了,但是没有成功:-(

@Retention(RetentionPolicy.RUNTIME)
@JacksonAnnotationsInside
@JsonProperty("_id")
@JsonSerialize(using=IdSerializer.class, include=JsonSerialize.Inclusion.NON_NULL)
@JsonDeserialize(using=IdDeserializer.class)
public @interface Id {}

public class D {
    @Id
    private String id;
}

问题答案:

使用@JacksonAnnotationsInside解决问题:

public class JacksonTest {

    @Retention(RetentionPolicy.RUNTIME)
    @JacksonAnnotationsInside
    @JsonProperty("_id")
    @JsonSerialize(using=IdSerializer.class, include=Inclusion.NON_NULL)
    @JsonDeserialize(using=IdDeserializer.class)
    public @interface Id {
    }

    public static class Answer {
        @Id
        String id;
        String name;

        public Answer() {}
    }

    @Test
    public void testInside() throws IOException {
        ObjectMapper mapper = new ObjectMapper();
        VisibilityChecker<?> checker = mapper.getSerializationConfig().getDefaultVisibilityChecker();
        mapper.setVisibilityChecker(checker.withFieldVisibility(JsonAutoDetect.Visibility.ANY));

        String string = "{ 'name' : 'John' , '_id' : { 'sub' : '47cc'}}".replace('\'', '"');
        Answer answer = mapper.reader(Answer.class).readValue(string);
        Assertions.assertThat(answer.id).isEqualTo("47cc");
    }
}


 类似资料:
  • 问题内容: 注释如何与Java一起使用?以及如何创建这样的自定义注释: 基本上,我需要保留的POJO在持久化时像这样进行序列化: 这样,实际的生成/持久对象是这样的: 任何想法如何实现这一点? 问题答案: 如果创建自定义注释,则必须使用此处的 API 示例进行处理。您可以参考如何声明注释。 这是Java中的示例注释声明的样子。 并被称为。 表示您想在运行时保留注释,并且可以在运行时访问它。 表示您

  • 我试图创建会影响序列化值的自定义jackson注释。 意思是: 现在序列化对象X(10)将导致: 我怎样才能做到这一点?

  • 我在代码中使用Lombok自动生成getter和setter代码。我想添加其他个人注释并使用它。 例如,我想添加一个方法来验证列表中是否存在一个键: 创建注释后,我将执行以下操作:

  • null 最终产品应该如下所示: 在上面的例子中,@public instance将只有uniqueKey、gtin、printedGtin作为属性。

  • 问题内容: 我用我的代码自动生成和代码。我想添加其他个人并使用它。 例如,我想添加一个方法来验证列表中键的存在: 创建注释后,我将只需要执行以下操作: 问题答案: 一般注意事项 如果您已经在使用Lombok,则可以添加自定义Lombok转换批注和处理程序。 使用和定义存在注释 创建一个处理程序 public class HandleExists extends JavacAnnotationHan

  • 根据这个答案:https://stackoverflow.com/a/43342675/5810648 我编写了这样的序列化程序: 如果注释存在并且字段为,则Witch应该编写字符串“N/A”。但是方法仅对非空字段调用。 此外,我还尝试调用setNullValueSerializer: 有了这样的实施: 但没有结果。 如何以这种方式处理空字段? 使现代化 根据讨论:https://github.c