首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用JaxB对象的JaxB JSON列表

使用JaxB对象的JaxB JSON列表
EN

Stack Overflow用户
提问于 2013-07-05 20:48:34
回答 1查看 1.1K关注 0票数 0

我正在使用JAX (CXF)与JaxB和杰克逊提供REST-API。不幸的是,所有发现的结果都没有帮助我解决以下(简单)问题:

我实现了以下方法:

代码语言:javascript
复制
@POST
@Path(ApiStatics.ARMY_CREATE_ARMY)
public com.empires.web.dto.Army createArmy(@FormParam("locationid") long locationId, @FormParam("name") String name, @FormParam("troops") ArmyTroops troops) {

下面是我的模型课:

代码语言:javascript
复制
@XmlRootElement
@XmlSeeAlso(ArmyTroop.class)
public class ArmyTroops {

    public ArmyTroops() {
    }

    public ArmyTroops(List<ArmyTroop> troops) {
        this.troops = troops;
    }

    @XmlElement(name = "troops")
    private List<ArmyTroop> troops = new ArrayList<ArmyTroop>();

    public List<ArmyTroop> getTroops() {
        return troops;
    }

    public void setTroops(List<ArmyTroop> troops) {
        this.troops = troops;
    }
}

ArmyTroop

代码语言:javascript
复制
@XmlRootElement(name = "troops")
public class ArmyTroop {

    @XmlElement
    private long troopId;

    @XmlElement
    private String amount;

    public long getTroopId() {
        return troopId;
    }

    public void setTroopId(long troopId) {
        this.troopId = troopId;
    }

    public String getAmount() {
        return amount;
    }  

    public void setAmount(String amount) {
        this.amount = amount;
    }
}

我发送的json看起来是这样的:

代码语言:javascript
复制
locationid  1
name    asdasd
troops  {"troops":[{"troopId":4,"amount":"5"},{"troopId":6,"amount":"5"}]}

不幸的是,对象没有被转换。相反,我收到了以下错误:

代码语言:javascript
复制
InjectionUtils #reportServerError - Parameter Class com.empires.web.dto.in.ArmyTroops has no constructor with single String parameter, static valueOf(String) or fromString(String) methods

如果我为构造函数提供一个字符串参数,就会得到上面提到的“部队”的整个json字符串。

知道为什么JaxB在这一点上不起作用吗?

EN

回答 1

Stack Overflow用户

发布于 2013-07-06 08:53:31

您正在使用@Form注释传递所有参数。但是http消息的表单部分必须是xml数据结构。您的3个参数没有主xml数据结构,因此无法工作。简而言之,表单对是作为身体发送的。Cxf使用MultivaluedMap发送params (cxf有此结构的xml模型)。正如您所看到的,它不适合那些不能进行琐碎序列化的参数。

在这里,我的解决方案是放弃@FormParam以避免这个问题:

1)使用@PathParam @CookieParam发送您的前2个参数,而“no标记”(body)仅用于陆军组合。

2)定义一个接受所有参数并可以序列化为xml数据结构并使用'no tag‘(body)发送的uber对象。

3)使用soap,使用cxf可以轻松地获得Rest和Soap。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/17496651

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档