今日の役に立たない一言 - Today’s Trifle! -

古い記事ではさまざまなテーマを書いていますが、2007年以降はプログラミング関連の話がほとんどです。

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()で要素の数が増えたり減ったりした時は、それなりのコードが必要。