Код: Выделить всё
package jackson.serialzation;
import com.fasterxml.jackson.annotation.JsonAnySetter;
import com.fasterxml.jackson.dataformat.xml.XmlMapper;
import com.fasterxml.jackson.dataformat.xml.annotation.JacksonXmlElementWrapper;
import com.fasterxml.jackson.dataformat.xml.annotation.JacksonXmlProperty;
import java.util.HashMap;
import java.util.Map;
public class Main {
public static void main(String[] args) throws Exception {
XmlMapper xmlMapper = new XmlMapper();
System.out.println("Test 1");
String test1 = "3 & 7 - 8 < 9 [/b]";[b]
Wrapper wrapper = xmlMapper.readValue(test1, Wrapper.class);
System.out.println(wrapper.getMyMap().get("a"));
String outputXML = xmlMapper.writeValueAsString(wrapper);
System.out.println(outputXML);
System.out.println("-----------------");
System.out.println("Test 2");
String test2 ="3 & 7 - 8 < 9 [/b]]]>";[b]
wrapper = xmlMapper.readValue(test2, Wrapper.class);
System.out.println(wrapper.getMyMap().get("a"));
outputXML = xmlMapper.writeValueAsString(wrapper);
System.out.println(outputXML);
}
}
class Wrapper {
private Map myMap = new HashMap();
@JsonAnyGetter
public Map getMyMap() {
return myMap;
}
@JsonAnySetter
@JacksonXmlProperty(localName = "myMap")
@JacksonXmlElementWrapper(useWrapping = false)
public void addToMap(String key, String value) {
this.myMap.put(key, value);
}
}
Вывод приведенного выше кода:
Код: Выделить всё
Test 1
Test 1
-----------------
Test 2
3 & 7 - 8 < 9 [/b][b]<b><c>3 & 7 - 8 < 9</c> </b>
Затем я попробовал с помощью теста 2 обернуть CDATA вокруг ...[/b], так что Джексон может десериализовать ... так же, как и строковое значение. Но при сериализации объекта-обертки в String он возвращает мне нежелательный вывод.Это должно быть:
Код: Выделить всё
3 & 7 - 8 < 9 [/b]
Итак, если Джексон сможет десериализовать строку в тесте 1, то она мог бы сериализоваться в строку точно так же, как String test1, это то, что я хотел.
Подробнее здесь: https://stackoverflow.com/questions/791 ... of-mapstri