为什么Spring要求枚举参数的名称与字符串值相同?

时间:2019-09-26 03:42:59

标签: java spring spring-boot enums

我创建了一个Spring Boot应用程序,该应用程序的标题中包含一个枚举参数client。如果我按如下方式定义枚举客户端:

public enum Client {

  app("app"),
  web("web");

  Client( String agent){
    this.agent = agent;
  }

  public final String agent;
}

它成功运行。但是当我声明我的枚举如下:

public enum Client {

  APP("app"),
  WEB("web");

  Client( String agent){
    this.agent = agent;
  }

  public final String agent;
}

它引发错误java.lang.IllegalArgumentException: No enum constant com.xx.xxx.Client.app

Spring似乎试图将字符串参数转换为同名的枚举,但是为什么它不使用Client.valueOf(String)方法来派生Client枚举呢?

我可以像第一种方法那样声明我的枚举,但想了解Spring为什么显示这种行为。

1 个答案:

答案 0 :(得分:1)

从您提供的信息和收到的错误消息中,我认为您将enum常量与enum值弄错了。

 APP("app")

在这里,APP是枚举常量,而app是其值,因此调用

Client.valueOf("APP")

它将返回-“ app”。

但是在错误提示中,您正在呼叫

Client.valueOf("app")