これは何? †
- REST-APIを作っているときに、引数のBeanをいちいち作るのめんどいので、Map<String, Object> で済ませようという話
JSONで表すことができるデータ型 †
型 | 型名 | 表記法 |
Integer | 整数 | 123 |
Float | 実数 | 123.0 |
String | 文字列 | "string" / 'string' |
Object | オブジェクト | {key:val} |
Array | 配列 | [a,b,c] |
Boolean | 真偽値 | true, false |
Null | | Null |
こいつらが、REST-API 側でどうマッピングされるか調べてみた
REST-API †
@Path("map")
public class MapResource {
@POST
@Consumes(MediaType.APPLICATION_JSON)
@Produces(MediaType.APPLICATION_JSON)
public Object doSomething(LinkedHashMap<String, Object> inJson) {
System.out.println(dumpMap(inJson));
return inJson;
}
private String dumpMap(Map<String, Object> map) {
return dumpMap(map," ");
}
private String dumpMap(Map<String, Object> map, String indent) {
StringBuilder sb = new StringBuilder();
sb.append(indent).append(map.getClass().getName()).append("{\n");
map.forEach((key, val) -> {
sb.append(indent);
switch(val.getClass().getName()){
case "java.util.ArrayList" :
sb.append(String.format("%s(%s<%s>)=%s\n"
, key
, val.getClass().getName()
, ((List)val).get(0).getClass().getName()
, val.toString()));
break;
case "java.util.LinkedHashMap" :
sb.append(String.format("%s(%s)={\n"
, key
, val.getClass().getName()));
sb.append(dumpMap((Map<String, Object>)val, indent + " "));
break;
default:
sb.append(String.format("%s(%s)=%s\n"
, key
, val.getClass().getName()
, val.toString()));
break;
}
});
sb.append(indent).append("}\n");
return sb.toString();
}
}
実行結果 †
Java#Glassfish