@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种情况中的任何一种的。

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