Java 如何省略<;DocumentImpl>;从使用Jackson序列化后的结果字符串?
我目前正在努力解决这个问题: 我正在尝试使用JACKSON将XML文档序列化为字符串,虽然一切似乎都运行顺利,但没有任何错误,但我在字符串结果中得到了不需要的元素 XML: 然而,我得到的结果是:Java 如何省略<;DocumentImpl>;从使用Jackson序列化后的结果字符串?,java,xml,serialization,jackson,Java,Xml,Serialization,Jackson,我目前正在努力解决这个问题: 我正在尝试使用JACKSON将XML文档序列化为字符串,虽然一切似乎都运行顺利,但没有任何错误,但我在字符串结果中得到了不需要的元素 XML: 然而,我得到的结果是: DEBUG - serialize(): serialized doc to string [<DocumentImpl><?xml version="1.0" encoding="UTF-16"?> <Respon
DEBUG - serialize(): serialized doc to string [<DocumentImpl><?xml version="1.0" encoding="UTF-16"?>
<Response id="requestTest"><Error message="exception" type="009"/></Response></DocumentImpl>]
DEBUG-serialize():将文档序列化为字符串[?xml version=“1.0”encoding=“UTF-16”?>
响应id=“requestest”>错误消息=“exception”type=“009”/>/Response>]
有一个我不想要的不需要的元素&而且它没有序列化“>”括号
我知道有一个简单的答案“只需使用.replaceAll()
函数就可以了”,但我想做得更聪明一些
问题是我怎么能省略它?您遗漏了
文档
类的代码,所以我有点猜测:文档
是由文档impl
实现的接口,并封装了响应
实例
如果是这样,只需序列化文档中包含的响应
:
mapper.writeValueAsString(document.getResponse());
Jackson将采用根元素的序列化对象的简单类名。如果必须自定义该名称,请在实现类上使用Jackson注释:
@JacksonXmlRootElement(localName = "Response")
public class ResponseImpl {}
另一方面:您的日志记录似乎很奇怪。不要在消息中包含方法的名称,但要配置适当的日志格式。现在我得到的是关于日志的规则,而不是我的项目achitect要求的规则,因此我必须遵循它。我想每个DTO类都有一个接口和实现。老实说,我不会那么做的。但是如果必须的话,您必须对Impl类进行注释,以便Jackson可以生成正确的名称参见我的编辑。我添加了一个示例,说明如何自定义xml根名称It nice and all,但我不创建带有注释的类,它是动态创建的响应元素。
mapper.writeValueAsString(document.getResponse());
@JacksonXmlRootElement(localName = "Response")
public class ResponseImpl {}