前に試したSpring Boot、JPAのプロジェクトを使用して、JSONでのリクエストを処理してみる。
Spring Tool SuiteでSpring Boot + JPAを試す
前回のプロジェクトツリー
ひそかにControllerクラスを分離している、、(気にしない気にしない。)
今回は、開催回を2つ(FromとTo)指定して、その間のデータを取得できるようにする。
まず、JSONマッピング用のBeanクラスを作成。
「com.egg1st.service.bean」パッケージを作成。配下に「Loto6ShowServiceCountBean.java」なるクラスを作成。
※シリアライズ可能とする
public class Loto6ShowServiceCountBean implements Serializable { private static final long serialVersionUID = 1L; private Integer countFrom; private Integer countTo; // setter, getterは省略。 }
リポジトリに今回用の検索処理を追加する。
ILoto6NumbersRepositoryインターフェースに独自メソッドを追加。
実装方法は@Queryアノテーションを使用してクエリを指定するようにした。
@Repository public interface ILoto6NumbersRepository extends JpaRepository<Loto6, Integer> { @Query("select u from loto6 u where u.execcount between :countFrom and :countTo") public List<Loto6> findByExecCountFromTo(@Param("countFrom") Integer countFrom, @Param("countTo") Integer countTo); }
サービスクラスへの追加。
1. Iloto6ShowServiceインターフェースへメソッド定義を追加。名前は「findByExecCountFromTo()」とした。
public interface Iloto6ShowService { public List<Loto6> findAll(); public List<Loto6> findByExecCountFromTo(Integer countFrom, Integer countTo); // 追加 }
2. 実装クラスへ処理を追加する。
@Override public List<Loto6> findByExecCountFromTo(Integer countFrom, Integer countTo) { return repository.findByExecCountFromTo(countFrom, countTo); }
コントローラークラスへの追加。
リクエストマッピングは”/count”とした。前回のアプリケーションクラスから分離したので全文を。
@RestController public class Loto6Controller { @Autowired Iloto6ShowService loto6ShowService; @RequestMapping("/") List<Loto6> getAll(Model model){ return loto6ShowService.findAll(); } // JSONのリクエストを受け付けるようにContent-Typeを指定する @RequestMapping(value = "/count", consumes=MediaType.APPLICATION_JSON_VALUE) // JSONマッピング用に作成したBeanクラスを指定する List<Loto6> getData(@RequestBody Loto6ShowServiceCountBean bean){ return loto6ShowService.findByExecCountFromTo(bean.getCountFrom(), bean.getCountTo()); } }
改修後のプロジェクトツリーはこんな感じに。
Postリクエストを送る必要があるので、chrome拡張機能であるAdvanced REST clientを組み込んで確認。
advanced-rest-client
リクエストを設定
開催回が10~12のデータが取得できた。
■参考リンク
http://niwaka.hateblo.jp/entry/2015/04/06/213516
http://qiita.com/tag1216/items/55742fdb442e5617f727