Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/xml/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何省略<;DocumentImpl>;从使用Jackson序列化后的结果字符串?_Java_Xml_Serialization_Jackson - Fatal编程技术网

Java 如何省略<;DocumentImpl>;从使用Jackson序列化后的结果字符串?

Java 如何省略<;DocumentImpl>;从使用Jackson序列化后的结果字符串?,java,xml,serialization,jackson,Java,Xml,Serialization,Jackson,我目前正在努力解决这个问题: 我正在尝试使用JACKSON将XML文档序列化为字符串,虽然一切似乎都运行顺利,但没有任何错误,但我在字符串结果中得到了不需要的元素 XML: 然而,我得到的结果是: DEBUG - serialize(): serialized doc to string [<DocumentImpl>&lt;?xml version="1.0" encoding="UTF-16"?> &lt;Respon

我目前正在努力解决这个问题:

我正在尝试使用JACKSON将XML文档序列化为字符串,虽然一切似乎都运行顺利,但没有任何错误,但我在字符串结果中得到了不需要的元素

XML:

然而,我得到的结果是:

DEBUG - serialize(): serialized doc to string [<DocumentImpl>&lt;?xml version="1.0" encoding="UTF-16"?>
&lt;Response id="requestTest">&lt;Error message="exception" type="009"/>&lt;/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 {}