webservice(之二)关于map

思路:

      -- 客户端调用时的参数转换成服务端能处理的数据类型.

      -- 服务端返回值转换成客户端能处理的数据类型.

转换器:

      -- 在形参与返回值前面加注解:@XmlJavaTypeAdapter(转换类)

      -- 自定义转换类需要继承XmlAdapter类.

          XmlAdapter<ValueType,BoundType>

 ValueType: JAXB知道怎么处理类型

 BoundType: JAXB不知道怎么处理类型

注意:类型转换时数据不能丢失.

服务端接口

public @XmlJavaTypeAdapter(MapTransferAdapter.class) Map<String, String> 

getMaps(@XmlJavaTypeAdapter(MapTransferAdapter.class) Map<String, String> params);

转换器:

public class MapTransferAdapter extends XmlAdapter<MapTransfer, Map<String, String>> {

/** 转进来: 把客户端调用参数,转换成服务器能处理的类型 */

@Override

public Map<String, String> unmarshal(MapTransfer v) throws Exception {

List<MapItem> lists = v.getMapItems();

Map<String, String> maps = new HashMap<>();

for (MapItem m : lists){

maps.put(m.getKey(), m.getValue());

}

return maps;

}

/** 转出去: 把服务端调用方法的返回值,转换成客户端能处理的数据类型 */

@Override

public MapTransfer marshal(Map<String, String> v) throws Exception {

MapTransfer mt = new MapTransfer();

for (Map.Entry<String, String> map : v.entrySet()){

// Entry: key-value

mt.getMapItems().add(new MapItem(map.getKey(), map.getValue()));

}

return mt;

}

}

复杂类型类

public class MapTransfer {

private List<MapItem> mapItems = new ArrayList<>();

public List<MapItem> getMapItems() {

return mapItems;

}

public void setMapItems(List<MapItem> mapItems) {

this.mapItems = mapItems;

}

}

public class MapItem {

private String key;

private String value;

public MapItem() {

}

public MapItem(String key, String value) {

super();

this.key = key;

this.value = value;

}

public String getKey() {

return key;

}

public void setKey(String key) {

this.key = key;

}

public String getValue() {

return value;

}

public void setValue(String value) {

this.value = value;

}

}

当客户端调用服务是  方法执行顺序(这是我的顺序,仅供参考)  首先执行unmarshal--->调用的方法---->marshal--->返回客户端数据


转载于:https://my.oschina.net/chenliyong/blog/667772

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值