ページング結果をキャッシュするjava.lang.Integer cannot be cast to java.lang.Stringエラー

1679 ワード

今日redisで作ったキャッシュのページングエラーjavaをテストしました.lang.Integer cannot be cast to java.lang.String.タイプ変換エラー.私のコントロールレイヤの方法
 @RequestMapping(value = "/queryNewsByPage", method = RequestMethod.POST)
    @ResponseBody
    @Cacheable( cacheNames="news", key = "#p0")
    public Result queryNewsByPage(@RequestParam("currentPage") Integer currentPage) {
        PageUtil pageUtil = newsService.queryNewsByPage(currentPage);
        return ResultUtil.successResult(pageUtil);
    }

無意識にdao層とservice層のメソッドパラメータを見ると、いずれもIntegerタイプで、問題ありません.その後、キャッシュキーの問題であるべきであることに気づいた.redis内のすべてのキーは文字列オブジェクトであり、文字列オブジェクトはlongタイプで保存できる整数値であってもよい.この問題をどのように理解するか:文字列と整数は同じオブジェクト構造にありません.redisではIntegerを強制的にStringタイプに変換することはできません.文字列に変換するにはStringを通過する必要があります.valueOf(integer)またはInteger.toString(integer)またはInteger.toString()
どのように解決しますか?IntegerをStringタイプに変更した後のコード:
 @RequestMapping(value = "/queryNewsByPage", method = RequestMethod.POST)
    @ResponseBody
    @Cacheable( cacheNames="news", key = "#p0")
    public Result queryNewsByPage(@RequestParam("currentPage") String currentPage) {
        Integer currentPage1 = Integer.valueOf(currentPage);
        PageUtil pageUtil = newsService.queryNewsByPage(currentPage1);
        return ResultUtil.successResult(pageUtil);
    }

サービス側がフロントエンドのデータを受信すると、データは値を取ります.
name = request.form.get('name', '')
age = int(request.form.get('age', '0'))

受信した値タイプはメソッドパラメータのタイプに応じて変換され、ここでStringタイプに変換されます.サービスレイヤを呼び出すときは、Stringタイプの値をIntegerタイプに変換する必要があります.