代码之家  ›  专栏  ›  技术社区  ›  user2083529

Rest控制器,提供枚举名,但将其值保存在数据库中

  •  1
  • user2083529  · 技术社区  · 6 年前

    我的问题似乎既简单又复杂。我有一个类显示,它有一个枚举,即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;
         }
      }
    }
    

    现在,我有一个rest控制器,它接收JSON格式的显示,即

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

    它在MongoDB中被保存为

    {“显示”:{“模式”:“大”}
    

    我想要的是,如果接收到rest请求显示为

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

    应该是 在数据库中另存为

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

    当我想通过rest控制器读取显示时,它应该与保存在数据库中的相同。

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

    1 回复  |  直到 6 年前
        1
  •  1
  •   GolamMazid Sajib    6 年前

    使用 @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);
        }