如何防止JAXB转义字符串

rjs*_*ang 13 java jaxb

我有一个由XJC生成的对象,叫做Product.我想设置product.currentPrice (a String)成为£210其中£的货币符号(从其他地方系统中的传递).

麻烦的是,JAXB正在逃避我的&号,所以它生产了£210.我怎么做不这样做?

Man*_*ngh 10

默认情况下,JAXB的marshaller实现通常会转义字符.要更改此默认行为,您必须编写实现该com.sun.xml.bind.marshaller.CharacterEscapeHandler接口的类.

在Marshaller中设置该处理程序

CharacterEscapeHandler escapeHandler = NoEscapeHandler.theInstance;
marshaller.setProperty("com.sun.xml.bind.characterEscapeHandler", escapeHandler); 
Run Code Online (Sandbox Code Playgroud)

您可以查看JAXB提供的样本,字符转义样本

  • 我接受这是正确的答案,因为它应该是正确的答案。对于其他阅读本文并希望它能对您有所帮助的人来说,由于存在错误,这实际上在 JAXB 2.2.1 中不起作用(https://jaxb.dev.java.net/issues/show_bug.cgi?id=777) (2认同)
  • 如何在spring中使用xml配置设置上述属性? (2认同)

小智 7

就像rjsang所说,使用"UTF-8"编码时存在一个错误,这是默认情况.如果您不关心区分大小写的问题,请尝试使用"utf-8"并让您的自定义转发器按预期工作.UTF-16也适用,除了"UTF-8"之外的任何东西:"uTf-8"等等.

标准中的可怕错误.

这是执行此操作的代码:

marshaller.setProperty(javax.xml.bind.Marshaller.JAXB_ENCODING, "utf-8");
Run Code Online (Sandbox Code Playgroud)