Вы можете определить пользовательский сериализатор и десериализатор для класса PARAMETER_DEFINITION_TABTYPE
, который изменит способ обработки ObjectMapper
.
Это объясняется в вики Jackson How-To: Custom Serializers
, если вы не можете добавить новые аннотации в класс PARAMETER_DEFINITION_TABTYPE
, вам следует использовать пользовательский модуль .
Это более или менее приведенный ниже код.Проблема здесь в том, что вам нужно предоставить много пользовательского кода, чтобы получить желаемое поведение.Было бы понятнее иметь отдельный класс для представления объекта JSON, поскольку он отличается от объекта XML:
public static void main(String[] args) throws Exception {
SimpleModule module = new SimpleModule("WrapperModule", new Version(1, 0, 0, null));
module.addSerializer(Wrapper.class, new WrapperSerializer(Wrapper.class));
module.addDeserializer(Wrapper.class, new WrapperDeserializer(Wrapper.class));
ObjectMapper mapper = new ObjectMapper();
mapper.registerModule(module);
Wrapper in = new Wrapper();
in.elements = new String[]{"a", "b", "c"};
String json = mapper.writeValueAsString(in);
System.out.println(json);
Wrapper out = mapper.readValue(json, Wrapper.class);
System.out.println(Arrays.toString(out.elements));
}
public static class Wrapper {
public String[] elements;
}
public static class WrapperSerializer extends StdSerializer<Wrapper> {
public WrapperSerializer(Class<Wrapper> t) {
super(t);
}
@Override
public void serialize(Wrapper w, JsonGenerator gen, SerializerProvider provider) throws IOException {
provider.defaultSerializeValue(w.elements, gen);
}
}
public static class WrapperDeserializer extends StdDeserializer<Wrapper> {
public WrapperDeserializer(Class<Wrapper> c) {
super(c);
}
@Override
public Wrapper deserialize(JsonParser p, DeserializationContext ctx) throws IOException {
Wrapper w = new Wrapper();
w.elements = ctx.readValue(p, String[].class);
return w;
}
}