使用jaxb注释使用Jersey将json编组到Java bean时如何使用一些间接

使用jaxb注释使用Jersey将json编组到Java bean时如何使用一些间接,第1张

使用jaxb注释使用Jersey将json编组到Java bean时如何使用一些间接

带注释的类 应该 是双射的:它 应该
允许生成从中解组出来的相同输入。如果仍然要使用非双目对象图,则可以使用

@XmlAnyElement
以下方式:

public class Issue {    @XmlElement(required = true)    protected Fields fields;    public Fields getFields() {        return fields;    }}

在您提供的输入中,字段不是列表,而是字段(JSON使用[]分隔列表):

public class Fields {    @XmlElement(required = true)    protected Summary summary;    @XmlAnyElement    private List<Element> fields;    public List<Element> getFields() {        return fields;    }    public Summary getSummary() {        return summary;    }}

为了捕获Summary,您必须定义一个专用的类。其余字段将在

fields
元素列表中分组。

public class Summary {    @XmlAttribute    protected String name;    public String getName() {        return name;    }}

下面,使用您的输入进行的单元测试表明一切正常:

public class JaxbTest {    @Test    public void unmarshal() throws JAXBException, IOException {        URL xmlUrl = Resources.getResource("json.txt");        InputStream stream = Resources.newInputStreamSupplier(xmlUrl).getInput();        Issue issue = parse(stream, Issue.class);        assertEquals("summary", issue.getFields().getSummary().getName());        Element element = issue.getFields().getFields().get(0);        assertEquals("customfield_10080", element.getTagName());        assertEquals("name", element.getFirstChild().getLocalName());        assertEquals("Testeur", element.getFirstChild().getFirstChild().getTextContent());    }    private <T> T parse(InputStream stream, Class<T> clazz) throws JAXBException {        JSonUnmarshaller unmarshaller = JsonContextNatural().createJSonUnmarshaller();        return unmarshaller.unmarshalFromJSON(stream, clazz);    }    private JSonJAXBContext JsonContextNatural() throws JAXBException {        return new JSonJAXBContext(JSONConfiguration.natural().build(), Issue.class);    }}

该测试表明,不使用专用类,您的代码将很快变得难以阅读。

您将需要那些maven依赖项来运行它:

<dependency>    <groupId>junit</groupId>    <artifactId>junit</artifactId>    <version>4.8.2</version>    <scope>test</scope></dependency><dependency>    <groupId>com.google.guava</groupId>    <artifactId>guava</artifactId>    <version>r08</version></dependency><dependency>    <groupId>com.sun.jersey</groupId>    <artifactId>jersey-json</artifactId>    <version>1.6</version></dependency>


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zaji/5506949.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-12-13
下一篇 2022-12-13

发表评论

登录后才能评论

评论列表(0条)

保存