客户端请求资源,如何发送参数?
数据发送,可以是字符串或者字节数据,那么如何发送整型、浮点型、对象等数据。有一种方式是将数据格式化,转换成字符串或字节类型发送,对端接收后,将其还原成源数据。
什么是序列化?
序列化 (Serialization)是将对象的状态信息转换为可以存储或传输的形式的过程。
Gson工具
Gson 是 Google 提供的用来在 Java 对象和 JSON 数据之间进行映射的 Java 类库。可以将一个 JSON 字符串转成一个 Java 对象。
ArgumentMaker 小工具
封装了Gson
1.0 参数映射
服务器接收到客户端参数,如何反序列化? 将JSON字符串转换为具体的数据?这里有一种方法,将参数名与类型、参数名与数据构建映射关系。
客户端:根据远端的方法,构建参数名与参数值的映射。
服务端:构建参数名与参数类型的映射。
客户端只需要发送一组映射关系,服务器可以根据参数名,找到对应的类型。
参数名与数值映射:
private final Map<String,String> arugumentPool;
那么客户端如何将映射关系发送过去?Map带有泛型。可以让双方约定保留映射池的参数类型。Gson工具有对应的方法:
private static final Type type = new TypeToken<Map<String, String>>(){}.getType();
参数名与类型映射:
public class ParameterInfo {
private String name;
private Parameter parameter;
}
1.2参数序列化与反序列化
参数池序列化:
@Override
public String toString() {
return gson.toJson(arugumentPool);
}
参数序列化:
public ArgumentMaker addArgument(String name,Object value) {
arugumentPool.put(name,gson.toJson(value));
return this;
}
参数池反序列化:
public ArgumentMaker(String paramter) {
arugumentPool = gson.fromJson(paramter,type);
}
参数反序列化:
public Object getArgument(String name,Class<?> type) {
String argument = arugumentPool.get(name);
return getObjcet(argument,type);
}