我创建了一个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为什么显示这种行为。
答案 0 :(得分:1)
从您提供的信息和收到的错误消息中,我认为您将enum常量与enum值弄错了。
APP("app")
在这里,APP是枚举常量,而app是其值,因此调用
Client.valueOf("APP")
它将返回-“ app”。
但是在错误提示中,您正在呼叫
Client.valueOf("app")