我有一个服务方法定义为:
public JaxbList<Deal> getDeal() {
List<Deal> deals = new ArrayList<Deal>();
Deal type = new Deal();
type.setDealID(1);
type.setName("June Discounts");
deals.add(type);
JaxbList list = new JaxbList(deals);
System.out.println("List size -> " + list.getList().size());
return list;
}
我的客户端定义为:
WebClient client = WebClient.create("....");
JaxbList deals = client.path("exampleservice/getDeal")
.accept("application/xml").get(JaxbList.class);
List<Deal> types = deals.getList();
当我在服务方法中打印出集合的大小时,结果返回为 1。 但是,我的客户端"类型"列表的大小为 0。 当我在浏览器中打开时,显示 1 交易。 所以,这个问题似乎是我的客户。 不过我不确定在哪里。
想法?
这是我的JaxbList类:
public class JaxbList<T>{
protected List<T> list;
public JaxbList(){}
public JaxbList(List<T> list){
System.out.println("Setting list...");
this.list=list;
}
@XmlElement(name="Item")
public List<T> getList(){
return list;
}
}
正如上面提到的 KasunBG,你的 public JaxbList(List<T> list)
构造函数永远不会被 JAXB 调用。而是使用默认的 no-arg 构造函数(参见 JAXB 需要公共 no-arg 构造函数中的一些讨论?)。实际上Java编译器应该抱怨这种情况有两个构造函数和"从未初始化字段list
"。
解决方案是引入一个 setList()
setter 并从 no-arg 构造函数中抛出运行时异常。