Можно ли объединить аннотации Джексона @JacksonXmlText и @JsonRawValue? - PullRequest
0 голосов
/ 08 июля 2019

Я пытаюсь убедиться, что некоторые сериализованные значения XML экранированы от HTML. Если они экранированы от HTML перед сериализацией Джексоном, Джексон пытается дважды экранировать текст, что приводит к недопустимым строкам. Чтобы обойти это, я попытался добавить аннотацию @JsonRawValue к своему полю. Кажется, это работает, однако теперь XML окружен тегами <content> </content>, потому что аннотация @JacksonXmlText, кажется, не работает сейчас, когда также присутствует аннотация @JsonRawValue.

Я попытался изменить порядок аннотаций. Я также попытался настроить Jackson XmlMapper так, чтобы мне не нужно было использовать необработанные значения, но кажется, что экранирование объекта XML не может быть легко сконфигурировано.

Вот пример сокращенного класса:

public class Message implements Serializable {
    @JacksonXmlProperty(localName = "messageID", isAttribute = true)
    private String messageID;

    @JsonRawValue
    @JacksonXmlText
    private String content;
}

Я получаю такие результаты:

<message messageID="Example Id"><content>Example &quot;Value&quot;</content></message>

но я бы хотел получить результаты без тегов контента:

<message messageID="Example Id">Example &quot;Value&quot;</message>

1 Ответ

0 голосов
/ 25 июля 2019

Я закончил тем, что написал пользовательский Escaper для выхода из HTML во время записи XML.

static class Escapers implements EscapingWriterFactory { ... }
XMLOutputFactory outF = xmlMapper.getFactory().getXMLOutputFactory();
outF.setProperty(XMLOutputFactory2.P_TEXT_ESCAPER, new Escapers());

Насколько я могу судить, невозможно объединить @JacksonXmlText и @JsonRawValue так, как я хотел.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...