java xml element_java – 如何使用@XmlElement注释列表?

我使用javax.xml.bind.annotation.XmlElement有以下注释:

@XmlElement

public List getKeywords() {

return keywords;

}

当我编写一些示例内容时,会产生以下XML:

keyword1

keyword2

我想获得以下XML:

keyword1

keyword2

我应该使用什么样的注释?

我试过了

@XmlElementWrapper

@XmlElement(name="keyword")

但随后整个内容消失,结果是:

如果我只尝试重命名元素,也会发生同样的情况:

@XmlElement(name="keyword")

我究竟做错了什么?

更新:

以下是根据第一个答案更新的类的完整代码,但它仍然无效(结果是一个空列表< keywords />当编组为XML时):

import java.util.List;

import javax.xml.bind.annotation.XmlElement;

import javax.xml.bind.annotation.XmlElementWrapper;

import javax.xml.bind.annotation.XmlRootElement;

@XmlRootElement

public class Content {

private List keywords;

public Content() {}

@XmlElementWrapper(name="keywords")

@XmlElement(name="keyword")

public List getKeywords() {

return keywords;

}

public void setKeywords(List keywords) {

this.keywords = keywords;

}

}

我也尝试了以下相同的结果:

import java.util.List;

import javax.xml.bind.annotation.XmlAccessType;

import javax.xml.bind.annotation.XmlAccessorType;

import javax.xml.bind.annotation.XmlElement;

import javax.xml.bind.annotation.XmlElementWrapper;

import javax.xml.bind.annotation.XmlRootElement;

@XmlRootElement

@XmlAccessorType(XmlAccessType.FIELD)

public class Content {

@XmlElementWrapper(name="keywords")

@XmlElement(name="keyword")

private List keywords;

public Content() {}

public List getKeywords() {

return keywords;

}

public void setKeywords(List keywords) {

this.keywords = keywords;

}

}

但是,关键字不为空,因为以下内容生成< keywords> keyword1< / keywords>< keywords> keyword2< / keywords>而不是一个空列表:

import java.util.List;

import javax.xml.bind.annotation.XmlElement;

import javax.xml.bind.annotation.XmlElementWrapper;

import javax.xml.bind.annotation.XmlRootElement;

@XmlRootElement

public class Content {

private List keywords;

public Content() {}

@XmlElement

public List getKeywords() {

return keywords;

}

public void setKeywords(List keywords) {

this.keywords = keywords;

}

}

编组的代码是(JAX-RS):

import java.io.StringWriter;

import javax.ws.rs.Consumes;

import javax.ws.rs.Path;

import javax.ws.rs.POST;

import javax.ws.rs.Produces;

import javax.ws.rs.core.MediaType;

import javax.ws.rs.core.Response;

import javax.xml.bind.JAXBContext;

import javax.xml.bind.JAXBException;

import javax.xml.bind.Marshaller;

@Path("process")

@Consumes(MediaType.APPLICATION_JSON)

@Produces(MediaType.APPLICATION_XML)

public class ContentHandler {

@POST

public Response process(Content content) {

StringWriter stringWriter = new StringWriter();

try {

JAXBContext jaxbContext = JAXBContext.newInstance(Content.class);

Marshaller jaxbMarshaller = jaxbContext.createMarshaller();

jaxbMarshaller.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, true);

jaxbMarshaller.marshal(content, stringWriter);

} catch (JAXBException e) {

return Response.serverError().entity(e.getMessage()).build();

}

return Response.ok(stringWriter.toString(), MediaType.APPLICATION_XML).build();

}

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值