有没有办法动态设置@JsonProperty注释,例如:
class A {
@JsonProperty("newB") //adding this dynamically
private String b;
}
或者我可以简单地重命名实例的字段吗?如果是这样,请给我一个主意。此外,ObjectMapper
可以以何种方式与序列化一起使用?
这是一个很晚的答案,但如果它对您或其他人有帮助,您应该能够在运行时更改注释。检查此链接:
https://www.baeldung.com/java-reflection-change-annotation-params
修改注释可能有点混乱,我更喜欢其他选项。
混合是一个很好的静态选项,但是如果您需要在运行时更改属性,您可以使用自定义序列化器(或反序列化器)。然后使用您选择的ObjectMapper注册您的序列化器(现在通过Jackson免费提供json/xml等编写格式)。以下是一些其他示例:
自定义序列化程序:https://www.baeldung.com/jackson-custom-serialization
自定义反序列化器:https://www.baeldung.com/jackson-deserialization
即。:
class A {
// @JsonProperty("newB") //adding this dynamically
String b;
}
class ASerializer extends StdSerializer<A> {
public ASerializer() {
this(null);
}
public ASerializer(Class<A> a) {
super(a);
}
@Override
public void serialize(A a, JsonGenerator gen, SerializerProvider provider) throws IOException {
if (a == null) {
gen.writeNull();
} else {
gen.writeStartObject();
gen.writeStringField("newB", a.b);
gen.writeEndObject();
}
}
}
@Test
public void test() throws JsonProcessingException {
A a = new A();
a.b = "bbb";
String exp = "{\"newB\":\"bbb\"}";
ObjectMapper mapper = new ObjectMapper();
SimpleModule module = new SimpleModule();
module.addSerializer(A.class, new ASerializer());
mapper.registerModule(module);
assertEquals(exp, mapper.writeValueAsString(a));
}
假设您的< code>POJO类如下所示:
class PojoA {
private String b;
// getters, setters
}
现在,您必须创建 MixIn 接口:
interface PojoAMixIn {
@JsonProperty("newB")
String getB();
}
简单用法:
PojoA pojoA = new PojoA();
pojoA.setB("B value");
System.out.println("Without MixIn:");
ObjectMapper mapper = new ObjectMapper();
System.out.println(mapper.writerWithDefaultPrettyPrinter().writeValueAsString(pojoA));
System.out.println("With MixIn:");
ObjectMapper mapperWithMixIn = new ObjectMapper();
mapperWithMixIn.addMixInAnnotations(PojoA.class, PojoAMixIn.class);
System.out.println(mapperWithMixIn.writerWithDefaultPrettyPrinter().writeValueAsString(pojoA));
以上程序打印:
Without MixIn:
{
"b" : "B value"
}
With MixIn:
{
"newB" : "B value"
}
低于我的情况。 我有一个处理文本的类文本处理器。我需要在这样的文本中找到相关的引用,然后用斯坦福大学的OpenIE工具提取信息。我使用这两条管道: “标记化、ssplit、pos、引理、ner、解析、提及、coref”表示共指。 和 用于信息提取的“标记化、ssplit、pos、引理、depparse、natlog、openie”。 单独使用它们来分析单个文本需要很多时间,但目前我必须这样做,因为
谢了。
我有一个json,它在一个领域模型中通过annotaion@SerializedName使用gson进行转换。 但有时在json中,有一个未知的键,我想将它编为字符串。 我在列表woList=gson.fromjson(parentArray,new typeToken>(){}.getType())上序列化了它;
我正在开发一个从Azure服务总线读取消息的应用程序。该应用程序是使用spring boot、spring jms和Qpid jms客户端创建的。我能够正确地从队列中读取消息,没有任何问题。PFB我用来阅读信息的代码。 问题是,对于不同的环境,我们有不同的目的地,例如用于开发的测试、用于qa的测试qa和用于生产的测试产品,所有这些值都作为azure提供。queueName在不同的应用程序-(ENV
课程对象不包装在标记中 某些属性是属性 我需要如何注释我的对象以使FasterXML反序列化这个XML?
问题内容: 我正在尝试开发用于数据库同步的ORM,并决定尝试一下Java。我有一个库定义了这样的同步注释 在android项目中,我使用此批注标记模型类 经过一番调查,最终编写了一种“加载程序”方法,该方法可以发现当前apk中的模型类。它应该检索所有标记为“ Synchronized”的类,但是这里的问题是getAttribute(Synchronized.class)不起作用。手动迭代注释并搜索