一.场景示例
微服务间经常会涉及到服务的相互调用,现在假设某个服务对外暴露的接口规定入参格式都为Map<String,String>.
二.常见的参数封装方式
Integer a = 123;
Long id = 123L;
Boolean flag = Boolean.TRUE;
String b = "abc";
Map<String,String> paramMap = new HashMap<>();
paramMap.put("a", a.toString());
paramMap.put("b",b);
paramMap.put("id",id.toString());
paramMap.put("flag",flag.toString());
remoteService.xxMethod(paramMap);
每次调用都要做这些类型转换,真的很麻烦,如何能简化点工足量呢?
三.使用extends定制Map
import java.text.DateFormat;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.HashMap;
import java.util.Map;
import java.util.TimeZone;
public class ParamHashMap extends HashMap<String, String> {
private static final long serialVersionUID = -1277791390393392630L;
public ParamHashMap() {
}
public ParamHashMap(Map<? extends String, ? extends String> m) {
super(m);
}
public String put(String key, Object value) {
String strValue;
if (value == null) {
strValue = null;
} else if (value instanceof String) {
strValue = (String)value;
} else if (value instanceof Integer) {
strValue = ((Integer)value).toString();
} else if (value instanceof Long) {
strValue = ((Long)value).toString();
} else if (value instanceof Float) {
strValue = ((Float)value).toString();
} else if (value instanceof Double) {
strValue = ((Double)value).toString();
} else if (value instanceof Boolean) {
strValue = ((Boolean)value).toString();
} else if (value instanceof Date) {
DateFormat format = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
format.setTimeZone(TimeZone.getTimeZone("GMT+8"));
strValue = format.format((Date)value);
} else {
strValue = value.toString();
}
return this.put(key, strValue);
}
}