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--->返回客户端数据


你可能感兴趣的:(webservice(之二)关于map)