假设我有一个简单的类:
public class MyClass {
private final String id;
private final String additionalJson;
}
我想将此类序列化为JSON,以便additionalJson
中的原始值直接写入JSON 而不用编写字段名称。
此外,应转换id
字段,使其名称写为identifier
。
示例
实例的值为:
id = 1234
additionalJson = "someKey": "someValue"
我想要的序列化JSON应该是:
{
"identifier": "1234",
"someKey": "someValue"
}
使用Mixins更改id
的名称是微不足道的:
public class MyClassMixin {
@JsonProperty("identifier")
private final String id;
}
但是我没有很好的方法来包含原始JSON而不添加字段名称。
我目前的解决方案是为JsonSerializer
编写自定义MyClass
,使用writeRaw()
写入字段值:
public class MyClassSerializer extends JsonSerializer<MyClass> {
@Override
public void serialize(MyClass myClass, JsonGenerator json, SerializerProvider serializerProvider) throws IOException {
try {
json.writeStartObject();
for (Field field : myClass.getClass().getDeclaredFields()) {
if (Objects.equals(field.getName(), "additionalJson")) {
json.writeRaw(", " + (String)field.get(angebotsTemplate));
} else {
json.writeObjectField(field.getName(),
}
}
json.writeEndObject();
} catch (IllegalAccessException e) {
e.printStackTrace();
}
}
这正确地包含additionalJson
值(在公开MyClass字段之后)但不使用Mixin。虽然我可以向序列化程序添加代码以转换id
名称,但我仍然希望在Mixin中执行此操作,因为MyClass
可能有许多字段,每个字段都有自己的转换,我不想在其中定义串行器。
有没有办法实现我想要的,最好是依靠Mixins?