java - 弄清楚在哪里放置 equalsIgnoreCase() 以避免区分大小写

标签 java enums

我正在使用 Spring 4 并使用以下 URL 进行 API 调用

我有一个 Java 枚举类,其定义如下:

http://localhost.com:8080/int/fin/trs?bId=B-XYZ&sortBy=currentTs

而且,我有 Controller 方法,此调用正在接收参数:

public ResponseEntity<SetRESTData<FinancialTransactionDTO>> getTFIUse(

    @RequestParam(value = "status", required = false) final String statusString,
    @RequestParam(value = "transactionMappableEnumthod", required = false) final String transactionMappableEnumthodString,
    @RequestParam(value = "sortBy", required = false) final String orderBy,
    @RequestParam(value = "sortDirection", required = false) final String sortDirectionString) {


    final FinancialTransactionPaginationData paginationData = StringUtils.isBlank(orderBy) ?
      null : new FinancialTransactionPaginationData(FinancialTransactionSortableField.fromCode(orderBy), null, null, sortDirectionString);


  }

FinancialTransactionSortableField 类如下:

public enum FinancialTransactionSortableField implements MappableEnum<FinancialTransactionSortableField>, SF {

  ID(DefaultSortableField.ID.getCode(), "T Id", DefaultSortableField.ID.getColumnNaMappableEnum()),
  CREATED_TS(DefaultSortableField.CREATED_TS.getCode(),
             DefaultSortableField.CREATED_TS.getDescription(),
             DefaultSortableField.CREATED_TS.getColumnNaMappableEnum()),;

DefaultSortableField 枚举类定义如下:

public enum DefaultSortableField implements MappableEnum<DefaultSortableField>, SF {


  CREATED_TS("CreatedTs", "Created Timestamp", "CreatedTs"),;

  private final String code;
  private final String description;
  private final String columnName;

  private static final Map<String, DefaultSortableField> cmap =
    MappableEnum.buildCodeMap(DefaultSortableField.class);

  private DefaultSortableField(final String code, final String description, final String columnName) {
    this.code = code;
    this.description = description;
    this.columnName = columnName;
  }

  @JsonValue
  @Override
  public String getCode() {
    return code;
  }

  @Override
  public String getDescription() {
    return description;
  }

  @Override
  public String getColumnName() {
    return columnName;
  }

  @Override
  public DefaultSortableField toEnum(final String code) {
    return fromCode(code);
  }

  @JsonCreator
  public static DefaultSortableField fromCode(final String code) {
    return cmap.get(code);
  }

  }

我基本上是在进行像这样的 api 调用 http://localhost.com:8080/int/fin/trs?bId=B-XYZ&sortBy=CreatedTs 因此,当代码执行到达 FinancialTransactionSortableField 类的 DefaultSortableField.CREATED_TS.getCode() 方法时,会返回 CreatedTs 值(这是 DefaultSortableField CREATED_TS 枚举声明中枚举的第一个参数。到目前为止,一切都很好。但是,当我通过sortBy=createdTs(注意上面 URL 中的小写 c ),它不起作用。我试图弄清楚在哪里使用 equalsIgnoreCase() 方法,它是否会位于 FinancialTransactionSortableField 类中的某个位置,在这条线 DefaultSortableField 的某个位置.CREATED_TS.getCode()

最佳答案

@JsonCreator
public static DefaultSortableField fromCode(final String code) {
    for(String key : cmap.keySet()){
        if(code.equalsIgnoreCase(key)){
            return cmap.get(key);
        }
    }
    return null;
}

关于java - 弄清楚在哪里放置 equalsIgnoreCase() 以避免区分大小写,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34782103/

相关文章:

java - 使用 LibVLC for android 创建视频播放器

java - 二进制 I/O 跳过字节并仅打印 UTF 类型

JavaMail : msg. setSubject() 在版本 1.4.7 中不接受第二个参数(编码),抛出编译时错误

枚举和 ConcurrentHashMap 上的 Java 单例。线程安全问题?

c++ - 对于模板 bool 参数,使用 bool 类型的强枚举 (C++11) 失败,为什么?

java - 如何在 ignite-messaging lambda 函数的 Remotelisten 中调用非静态函数?

java - 无法访问 Spring H2 控制台

ios - 尝试打印错误(AKA ErrorType)枚举的描述

optimization - D中的常量与枚举

enums - 在 Gosu 中使用枚举代替 switch case