我使用REST,我想知道我是否可以告诉jaxb将字符串字段"as-it-is"插入到传出的xml中.当然我会在返回之前将其解包,但我想保存这一步.
@XmlRootElement(name="unnestedResponse")
public class Response{
@Insert annotation here ;-)
private String alreadyXml;
private int otherDate; ...
}
Run Code Online (Sandbox Code Playgroud)
是否有可能告诉JAXB只使用String而不是转义?我希望客户端不必解析我的响应,然后解析此字段.
问候,m
您可以使用@XmlAnyElement并指定a 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;
}
}
Run Code Online (Sandbox Code Playgroud)
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);
}
}
}
Run Code Online (Sandbox Code Playgroud)
欲获得更多信息
| 归档时间: |
|
| 查看次数: |
5217 次 |
| 最近记录: |