gpt4 book ai didi

json - REST + json + JAXB + namespace

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

我一直在努力将JSON发布到REST服务和JAXB命名空间。我正在使用Resteasy标记服务器端方法。我有以下服务:

@POST
@Mapped(namespaceMap={@XmlNsMap(namespace="http://acme.com", jsonName=""))
@Path("/search")
@Consumes("application/json")
public List<I> search(SearchCriteria crit);

我有以下对象:
@XmlRootElement(namespace="http://acme.com")
public class DateCriteria {
@XmlElement
private Date start;
@XmlElement
private Date end;
}


@XmlRootElement(namespace="http://acme.com")
public class MultCriteria {
@XmlElementRefs({@XmlElementRef(type=DateCriteria.class)})
private List<DateCriteria> dateCriterias;
}

我可以在帖子中发送以下JSON,它可以正常工作:
{ "acme.MultCriteria": { "acme.DateCriteria": { startDate: "2009/01/01", endDate: "2009/01/01" } } }

在服务上,我得到一个带有DateCriteria的单个元素列表的MultCriteria对象。奇怪的是,即使我使用指向空 namespace 的映射来标记服务,我也必须在JSON对象中传递 namespace 。

如果我尝试发送数组,如下所示:
{ "acme.MultCriteria": { "acme.DateCriteria": [ { startDate: "2009/01/01", endDate: "2009/01/01" }, { startDate: "2009/01/01", endDate: "2009/01/01" } ] } }

我得到一个带有空DateCriteria列表的MultCriteria对象。如果我修改DateCriteria对象,使其具有一个空的 namespace ,则上述语法可以正常工作。

有人在这里看到我在做什么错吗?应该如何设置 namespace ,以及如何正确将其传递给服务?

最佳答案

在纯JAXB中,当您使用@XmlRootElement(namespace="http://acme.com")注释类时, namespace 声明不会自动应用于所有子元素。必须在每个字段上明确设置它,例如

@XmlRootElement(namespace="http://acme.com")
public class MultCriteria {
@XmlElement(name="DateCriteria", namespace="http://acme.com")
private List<DateCriteria> dateCriterias;
}

至于它如何与RESTeasy交互,我不能说,我对JSON-JAXB转换不熟悉。

关于json - REST + json + JAXB + namespace ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1625325/

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