gpt4 book ai didi

java - 将 & 替换为 & 使用 Jackson ObjectMapper

转载 作者:太空宇宙 更新时间:2023-11-04 10:44:53 25 4
gpt4 key购买 nike

在我正在工作的应用程序中,我们需要将巨大的 json 转换为更大的 XML。两个元素的结构非常不同,因此我们决定创建一个与 XSD 匹配的 XML 文件,并使用统一的表达语言填充字段。例如:

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<Objects xmlns="..">
<Object>
<Field>${json.field}</Field>
<Object>
<Objects>

使用 JUEL 完成 ${json.field} 的替换

运行 JUEL 进程后,我们将 xml 字符串解码到对象中,然后继续该进程。解码代码如下所示:

  private XmlObjects unmarshal(StringReader xmlString) {
try {
Unmarshaller unmarshaller = jaxbContext.createUnmarshaller();
return (XmlObjects) unmarshaller.unmarshal(xmlString);
} catch (JAXBException e) {
throw new RuntimeException(e);
}
}

我们面临的问题是 json.field 可能包含 XML 中不允许的字符,例如 & 或 <, >。

一个简单的解决方法是将上述方法中的所有 & 替换为 & en,但这并不能解决 < 或 > 的问题,而且我无法在这一点上替换它。

我想做的是在 json 映射到 POJO 时使用 Jackson 进行替换,但我找不到方法来做到这一点。到目前为止,我已经尝试创建一个自定义 CharacterEscapes 类并将其设置为 ObjectMapper 但没有成功。

所以,这是总结一切的测试:

  @Test
public void test() throws IOException {
ObjectMapper objectMapper = Jackson.newObjectMapper();
objectMapper.getFactory().setCharacterEscapes(new XMLCharacterEscapes());

String json = "{\"variable\":\"a string with &\"}";
FooJson fooJson = objectMapper.readValue(json, FooJson.class);
assertEquals("a string with &amp;", fooJson.getVariable());
}

这是 XMLCharacterEscapes 类:

public class XMLCharacterEscapes extends CharacterEscapes {

private final int[] asciiEscapes;

public XMLCharacterEscapes() {
int[] esc = CharacterEscapes.standardAsciiEscapesForJSON();
esc['&'] = CharacterEscapes.ESCAPE_CUSTOM;
asciiEscapes = esc;
}

@Override
public int[] getEscapeCodesForAscii() {
return asciiEscapes;
}

@Override
public SerializableString getEscapeSequence(int i) {
return new SerializedString("&amp;");
}
}

最佳答案

如果我可以建议一个替代方案,您能否让您的解码器在读取 XML 时将 JUEL 应用于元素值?或者,您可以在解码后遍历 XML 对象图并将 JUEL 应用于元素值吗?

编辑:问题似乎只是您应用替换的顺序。一旦有了 XML 文档,您应该能够设置您喜欢的任何值,并且它将处理正确的转义。

关于java - 将 & 替换为 & 使用 Jackson ObjectMapper,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48524137/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com