gpt4 book ai didi

java - 创建自定义 Jackson 注释

转载 作者:搜寻专家 更新时间:2023-10-30 19:55:05 24 4
gpt4 key购买 nike

一个项目需要大量使用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 - 创建自定义 Jackson 注释,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12921812/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com