У меня есть относительно сложный объект, который содержит несколько полей. Мне нужно сериализовать одно из полей, используя собственный сериализатор, но нужно эмулировать функциональность @JsonUnwrapped
.@JsonUnwrapped for Custom Serializer
Для простоты я сократить это до двух полей:
public class MyClass
{
@JsonProperty("subject")
private final String subject;
@JsonSerialize(using=MySenderSerializer.class)
private final MailActor sender;
}
и мой пользовательский класс сериализатору выглядит следующим образом:
public class MySenderSerializer extends StdSerializer<MailActor>
{
public MySenderSerializer()
{
super(MailActor.class, true);
}
@Override
public void serialize(final MailActor value, final JsonGenerator gen, final SerializerProvider provider) throws IOException
{
gen.writeStringField("from_name", value.getName());
gen.writeStringField("from_email", value.getAddress());
}
}
Все это прекрасно, за исключением того, что выход JSON выглядит следующим образом:
{
...
"subject": "test subject",
"sender": {
"from_name": "test from",
"from_email": "[email protected]"
},
...
}
и мне нужно разворачивать sender
поле так что JSON выглядит следующим образом:
{
...
"subject": "test subject",
"from_name": "test from",
"from_email": "[email protected]",
...
}
Если я использую стандартные сериализаторы я мог бы использовать @JsonUnwrapped
аннотации, чтобы сделать это, но он не появляется, чтобы быть совместимыми с пользовательскими сериализаторами. Как я могу получить требуемый вывод JSON без записи пользовательского сериализатора для объекта MyClass
?
Я бы не сказал, что у объекта есть недостатки; он отлично работает в других областях, включая другие вызовы в одном API, и проблема подходит к ожидаемому формату для конкретного вызова в конкретном API. – jgm
Тогда это должен быть другой объект, я полагаю. Поскольку вы не хотите, чтобы объект Mail с объектом Sender находился внутри, вы хотите, чтобы объект Mail с отсутствием свойств отправителя, я действительно не рассматриваю его как проблему разбора json, что я подразумеваю под дизайном объекта. –
Спасибо за продолжение ответа, но моя борьба с Джексоном не является объектной моделью. Та же самая информация (имя и адрес электронной почты) отображается в разных частях API в разных форматах: иногда завернуты, а иногда нет, и с разными именами полей. Независимо от того, что я выбираю в качестве дизайна объекта, у меня будет эта проблема, и это проблема, которая обычно рассматривается в Jackson с помощью '@ JsonUnwrapped', но это не очень хорошо сочетается с пользовательскими сериализаторами. Следовательно, вопрос, есть ли что-то эквивалентное, я могу сделать с помощью настраиваемого сериализатора. – jgm