【问题标题】:@RequestParam defaultvalue does not accept enum value as a default value@RequestParam defaultvalue 不接受枚举值作为默认值
【发布时间】:2012-07-19 05:37:08
【问题描述】:

我正在使用弹簧休息控制器。

这里是代码。

@RequestParam(value = "status", required = false, defaultValue = StatusEnum.STATUS.toString())

如果我使用枚举作为默认值,我会得到注释属性 RequestParam.defaultValue 的值必须是常量表达式。

据我了解,它应该接受枚举作为默认值。

请指教。

【问题讨论】:

  • 方法调用不是“常量表达式”。
  • “常量表达式”是可以在编译时解析的。就像一个静态的 final 字段、一个字符串或一个数字。

标签: spring-mvc enums annotations


【解决方案1】:

因为它必须是一个字符串,而且它必须是一个常量表达式,所以您唯一真正的选择是使用适用于 Enum.valueOf() 的值,因为这就是最终解决问题的方式。

具体来说,你应该阅读

@RequestParam(value = "status", required = false, defaultValue = "STATUS")

当然,假设"STATUS"StatusEnum.STATUS 的字符串值。

【讨论】:

  • 否则可以使用StatusEnum.STATUS.name()
  • @user2344797 只允许使用常量表达式。
  • @Dineshmohan name() 也不起作用。我想知道为什么... cuae 它必须在编译时评估为字符串,并且默认情况下所有枚举都是常量。如果有人能解释...那就太好了!
【解决方案2】:

避免字符串出现在不同位置的解决方法是使用类似的东西

public enum StatusEnum {
    STATUS();
    
    public class Names {
       public static final String STATUS = "STATUS";
    }
    
 }

在查询参数中

@RequestParam(value = "status", required = false, defaultValue = StatusEnum.Names.STATUS)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-10-27
    • 1970-01-01
    • 2022-11-16
    • 2011-10-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多