java - 休息 Controller ,提供枚举名称但将其值保存在数据库中

标签 java spring spring-boot enums jackson-databind

我的问题似乎既简单又复杂。我有一个 Display 类,它有一个枚举,即 DisplayMode。

public class Display {

  private DisplayMode mode;
  //getters and setters

  public enum DisplayMode {
    BIG("display.mode.big"),
    SMALL("display.mode.small"),
    MEDIUM("display.mode.medium");

    private String modeValue;

    DisplayMode(String modeValue) {
        this.modeValue = modeValue;
    }

    public String toString() {
        return this.name() + "/" + this.modeValue;
    }

    public String getModeValue() {
        return this.modeValue;
     }
  }
}

现在,我有一个休息 Controller ,它接收 JSON 格式的显示,即

{"display": {"mode": "BIG"}}

它在 MongoDB 中保存为

{"display": {"mode": "BIG"}}

我想要的是,如果收到其余请求显示为

{"display": {"mode": "BIG"}} or 
{"display": {"mode": "big"}} or anyCase insensitive value

它应该在数据库中保存为

{"display": {"mode": "display.mode.big"}}

当我想通过休息 Controller 读取显示时,它应该与数据库中保存的相同。

使用序列化器和反序列化器或其他任何东西的任何解决方案。谢谢

最佳答案

使用@JsonValue保存值&&@JsonCreator进行反序列化。

@JsonValue
final String modeValue() {
    return this.modeValue;
}

对于解串器:

@JsonCreator
    public static DisplayMode forValue(String v) {
        return Arrays.stream(DisplayMode.values())
                .filter(dm -> dm.name().equalsIgnoreCase(v))
                .findAny().orElse(null);
    }

关于java - 休息 Controller ,提供枚举名称但将其值保存在数据库中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51675889/

相关文章:

java - 解决包冲突

java - 可以为每个 SpringbootTest 注解加载特定的 data.sql

java - 在哪里放置文件以从java中的包下的类读取?

java - spring mvc 操作方法可以将模型返回到 View 或 xml 或 json 吗?

java - 更改 Spring JPA 的分页方式

java - XML 架构引用

javascript - Azure 单点登录发布请求时出现 403 禁止错误

显示为 Null 的 Spring 属性

java - 在 JPanel 中显示多个 JTextField 和 JLabels 时遇到困难

web-services - Spring+休息+mysql