【问题标题】:Checkbox in JHipsterJHipster 中的复选框
【发布时间】:2019-06-30 04:25:24
【问题描述】:

我在 html 中有一个复选框

<input type="checkbox" class="form-control" name="myflag" [(ngModel)]="myEntity.myflag" id="field_myflag">

DB 上的字段 (myflag) 有 2 个可能的值 [OK, KO],这两个值在枚举中定义:

@Enumerated(EnumType.STRING)
@Column(name = "MYFLAG")
private MYFLAGENUM myflag;

所以:

public enum MYFLAGENUM {
   OK, KO
}

每次我尝试保存时,都会遇到异常:

WARN 888 --- [XNIO-7 task-5] .mmaExceptionHandlerExceptionResolver:已解决由处理程序执行引起的异常:org.springframework.http.converter.HttpMessageNotReadableException:JSON 解析错误:无法反序列化 myproject.hipster.testing.domain.enumeration.MYFLAGENUM 的实例VALUE_FALSE 令牌;嵌套异常是 com.fasterxml.jackson.databind.exc.MismatchedInputException:无法在 [Source: (PushbackInputStream);行:1,列:37](通过引用链:myproject.hipster.testing.domain.MYENTITY["myflag"])

似乎 VALUE_FALSE(或 VALUE_TRUE)无法转换为“KO”(或“OK”)。所以我创建了一个转换器,但我看到它没有被调用。 如何使用 JHipster 复选框管理我自己的“布尔”值?

【问题讨论】:

    标签: java angular checkbox jhipster


    【解决方案1】:

    试试

    ...
    @JsonDeserialize(using = OkKoDeserializer.class)
    private MYFLAGENUM myflag;
    

    和:

    public class OkKoDeserializer extends StdScalarDeserializer<MYFLAGENUM> {
    public OkKoDeserializer() {
        super(MYFLAGENUM.class);
    }
    
    @Override
    public MYFLAGENUM deserialize(JsonParser p, DeserializationContext ctxt) throws IOException, JsonProcessingException {
        String value = p.getValueAsString();
        if ("VALUE_FALSE".equalsIgnoreCase(value)) {
            return MYFLAGENUM.KO;
        }
        if ("VALUE_TRUE".equalsIgnoreCase(value)) {
            return MYFLAGENUM.OK;
        }
    
        throw new IllegalArgumentException("value " + value + " is not parseable to a MYFLAGENUM");
    }
    }
    

    这样你告诉框架使用一种特殊的策略将输入值转换为枚举值。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-09-27
      • 1970-01-01
      • 2014-10-07
      • 1970-01-01
      • 2023-03-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多