ページング結果をキャッシュするjava.lang.Integer cannot be cast to java.lang.Stringエラー
1679 ワード
今日redisで作ったキャッシュのページングエラーjavaをテストしました.lang.Integer cannot be cast to java.lang.String.タイプ変換エラー.私のコントロールレイヤの方法
無意識にdao層とservice層のメソッドパラメータを見ると、いずれもIntegerタイプで、問題ありません.その後、キャッシュキーの問題であるべきであることに気づいた.redis内のすべてのキーは文字列オブジェクトであり、文字列オブジェクトはlongタイプで保存できる整数値であってもよい.この問題をどのように理解するか:文字列と整数は同じオブジェクト構造にありません.redisではIntegerを強制的にStringタイプに変換することはできません.文字列に変換するにはStringを通過する必要があります.valueOf(integer)またはInteger.toString(integer)またはInteger.toString()
どのように解決しますか?IntegerをStringタイプに変更した後のコード:
サービス側がフロントエンドのデータを受信すると、データは値を取ります.
受信した値タイプはメソッドパラメータのタイプに応じて変換され、ここでStringタイプに変換されます.サービスレイヤを呼び出すときは、Stringタイプの値をIntegerタイプに変換する必要があります.
–
@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タイプに変換する必要があります.
–