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

标签 java spring spring-boot enums

我创建了一个 Spring boot 应用程序,它在 header 中采用枚举参数 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:没有枚举常量com.xx.xxx.Client.app

看来Spring正在尝试将字符串参数转换为同名枚举,但为什么它不使用Client.valueOf(String)方法来派生Client 枚举?

我可以像第一种方法一样声明我的枚举,但想了解为什么 Spring 会表现出这种行为。

最佳答案

根据您提供的信息和收到的错误消息,我认为您将枚举常量与枚举值搞错了。

 APP("app")

这里,APP是枚举常量,app是它的值,所以当你调用

Client.valueOf("APP")

它将返回 - “app”。

但正如错误所示,您正在调用

Client.valueOf("app")

关于java - 为什么Spring要求枚举参数的名称与字符串值相同?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58109259/

相关文章:

java - 程序中途崩溃,不知道为什么

java - 更新部分 XML 文件,保留所有格式

java - Spring JPA 一对一映射获取 null

java - Elastic Search SSL证书到期

java - m2eclipse 依赖版本不是最新的

java - URL 连接获取输入流失败

java - 在tomcat中更改属性文件时出错

java - com.calculator 无法解析为类型

java - Spring Boot 集成测试无法访问 application.properties 文件

java - Spring CannotGetJdbcConnectionException,嵌套异常jdbc4.MySQLNonTransientConnectionException