springでJSON配列を受け取る方法
springのControllerでJSON配列を受け取る時は、メソッドのパラメータを配列にするだけで受け取れるようになる。
もっとめんどくさいのかと思ったけど、あっさり動作した。
@RequestMapping(value = "/json/hoges", method + RequestMethod.POST, consumes = MediaType.APPLICATION_JSON_VALUE, produces = MediaType.APPLICATION_JSON_VALUE + ";charset=utf-8") @ResponseBody public Hoge[] insertHoge(@RequestBody Hoge[] hoges) { hogeService.create(hoges); return hoges; } @RequestMapping(value = "/json/hoges", method + RequestMethod.PUT, consumes = MediaType.APPLICATION_JSON_VALUE, produces = MediaType.APPLICATION_JSON_VALUE + ";charset=utf-8") @ResponseBody public Hoge[] updateHoge(@RequestBody Hoge[] hoges) { hogeService.update(hoges); return hoges; }
Daoの方は、さすがに配列をそのまま保存してくれる機能はないみたいなので、ループして1個ずつ保存しないといけない。
コンパイルエラーになってなかったから、最初は配列をそのまま save() してみたけど、MappingException が発生してしもた。
@Override @Transactional public Hoge[] create(Hoge[] hoges) { Session session = sessionFactory.getCurrentSession(); try { for (Hoge h : hoges) { session.save(h); session.refresh(h); } } catch (Exception e) { throw e; } return hoges; }
update()で要素の数が増えたり減ったりした時は、それなりのコードが必要。