こんにちは。
本日はJavaメモです。
概要
APIでデータを受けるとき、
特定のクラスを指定していました。
以下の記事でも、全パラメータを指定したクラスを作成しています。
【JavaScript】fetch()を使ってみる - なんだかGoodVibes
JsonAnySetterを使用すると
パラメータの設定が不要になったり、
特定のパラメータ以外はすべて一個にまとめたりとかできちゃいます。
サンプルコード
サンプルでは、idのみパラメータを用意し、
その他のパラメータはothersに追加されるようにしています。
@RestController @RequestMapping("/api") public class JsonAnySetterSample { public static class ReqPamater { private String id; private Map<String, String> others = new LinkedHashMap<>(); public void setId(String id) { this.id = id; } public String getId() { return this.id; } @JsonAnySetter public void setOthers(String k, String v) { this.others.put(k, v); } public Map<String, String> getOthers() { return this.others; } } @PostMapping("postReq") public void postMethod(@RequestBody ReqPamater req) { for (Map.Entry<String, String> item : req.getOthers().entrySet()) { System.out.println(item.getKey() + ": " + item.getValue()); } } }
データ送信側はjavascriptです
async function anySetterBtnClicked() { const sendData = { 'id': '2', 'name': 'Bob', 'age': '100', 'color': 'yellow' } const options = { method: 'POST', headers: { 'Content-Type': 'application/json' }, body: JSON.stringify(sendData) } const p = await fetch("http://localhost:8090/api/postReq", options) }
Javaの出力は以下のようになります。
name: Bob age: 100 color: yellow
id以外のパラメータがothersにセットされています。
以上です。