@RequestParam 註解 attribute value must be a constants

如下代碼所示:
我在利用@RequestParam 爲max參數設置默認值MAX_LONG_AS_STRING 得實惠,產生了一個錯誤attribute value must be a constants
在這裏插入圖片描述

private static final String MAX_LONG_AS_STRING = Long.toString(Long.MAX_VALUE);

@RequestMapping(value = "latestBlogs",method = RequestMethod.GET)
    public List<Blog> blogs(@RequestParam(value = "max",defaultValue = MAX_LONG_AS_STRING ) long max,
                            @RequestParam(value = "count",defaultValue = "20")int count){
        return blogRepository.findBlogs(max,count) ;
    }

MAX_LONG_AS_STRING 明明爲常量,爲什麼還是提示attribute value must be a constants 呢?

首先有兩個概念,運行時常量和編譯時常量

  1. 運行時常量,運行時確定的常量值。
  2. 編譯時常量,即在編譯時就能確定的常量值。

編譯時常量值,什麼是 ** Compile-time Constant **

1. 原始類型字面量,或者String字面量
2. 能轉型爲原始類型字面量,或String字面量的常量
3. 一元運算符(+,-,~,!,但不包含++, --) 和1,2組成的表達式 
4. 多元運算符(*,/和%)和1,2組成的表達式
5. 附加運算符( additive operators) (+ 或 -)與之前幾條組成的表達式
6. 位移運算符(<<,>>, >>>)和之前幾條組成的表達式
7. 關係運算符(<,<=,>,>= ,不包括 instanceof)與之前幾條組成的表達式
8. 關係運算符(==,!=)與之前幾條組成的表達式
9. 位運算符(&, ^, |)與之前幾條組成的表達式
10. 條件與和條件或運算符(&&, ||) 與之前幾條組成的表達式
11. 三元運算符 (?:)和之前幾條組成的表達式
12. 帶括號的表達式,括號內也是常量表達式
13. 引用常量變量的簡單變量 [§6.5.6.1](https://docs.oracle.com/javase/specs/jls/se7/html/jls-6.html#jls-6.5.6.1)
14. 類中的常量變量引用,使用類的全限定名或類名進行引用(String.class)

RequestParam的defaultValue很明顯需要設置爲編譯時常量值,而Long.toString(Long.MAX_VALUE)是不滿足上面14種情況中的任何一種的。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章