gpt4 book ai didi

JAXB 按原样使用 String

转载 作者:行者123 更新时间:2023-12-04 14:15:40 24 4
gpt4 key购买 nike

我使用 REST,我想知道是否可以告诉 jaxb 将字符串字段“原样”插入到传出的 xml 中。
当然,我会在返回之前将其拆开,但我想保存这一步。

@XmlRootElement(name="unnestedResponse")
public class Response{
@Insert annotation here ;-)
private String alreadyXml;
private int otherDate; ...
}

是否有可能告诉 JAXB 只使用字符串而不转义?我希望客户端不必解析我的响应然后解析这个字段。

你好,

最佳答案

您可以使用 @XmlAnyElement并指定一个 DomHandler将 XML 文档的一部分保留为 String .

客户

import javax.xml.bind.annotation.*;

@XmlRootElement
public class Customer {

private String bio;

@XmlAnyElement(BioHandler.class)
public String getBio() {
return bio;
}

public void setBio(String bio) {
this.bio = bio;
}

}

BioHandler

import java.io.*;
import javax.xml.bind.ValidationEventHandler;
import javax.xml.bind.annotation.DomHandler;
import javax.xml.transform.Source;
import javax.xml.transform.stream.*;

public class BioHandler implements DomHandler<String, StreamResult> {

private static final String BIO_START_TAG = "<bio>";
private static final String BIO_END_TAG = "</bio>";

private StringWriter xmlWriter = new StringWriter();

public StreamResult createUnmarshaller(ValidationEventHandler errorHandler) {
return new StreamResult(xmlWriter);
}

public String getElement(StreamResult rt) {
String xml = rt.getWriter().toString();
int beginIndex = xml.indexOf(BIO_START_TAG) + BIO_START_TAG.length();
int endIndex = xml.indexOf(BIO_END_TAG);
return xml.substring(beginIndex, endIndex);
}

public Source marshal(String n, ValidationEventHandler errorHandler) {
try {
String xml = BIO_START_TAG + n.trim() + BIO_END_TAG;
StringReader xmlReader = new StringReader(xml);
return new StreamSource(xmlReader);
} catch(Exception e) {
throw new RuntimeException(e);
}
}

}

更多信息
  • http://blog.bdoughan.com/2011/04/xmlanyelement-and-non-dom-properties.html
  • 关于JAXB 按原样使用 String,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13121914/

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