REST-API を提供するために、JaxB と Jackson で JAX-RS (CXF) を使用しています。残念ながら、見つかった結果はどれも次の(単純な)問題に役立ちません:
次の方法を実装しました。
@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) {
ここに私のモデルクラスがあります:
@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;
}
}
陸軍部隊
@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は次のようになります:
locationid 1
name asdasd
troops {"troops":[{"troopId":4,"amount":"5"},{"troopId":6,"amount":"5"}]}
残念ながら、オブジェクトは変換されません。代わりに、次のエラーが表示されます。
InjectionUtils #reportServerError - Parameter Class com.empires.web.dto.in.ArmyTroops has no constructor with single String parameter, static valueOf(String) or fromString(String) methods
コンストラクターに 1 つの文字列パラメーターを指定すると、前述のように "軍隊" の json 文字列全体が渡されます。
この時点で JaxB が機能しない理由はありますか?