亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

Validator 和 DataBinder:如何單獨處理多值 bean 字段

Validator 和 DataBinder:如何單獨處理多值 bean 字段

慕田峪7331174 2023-09-06 14:59:35
我有一個 bean,其中有一個 List 類型的字段。  public List<MyClass> getter() {    return field;  }  public void setter(MyClass[] source) {    this.field = Arrays.asList(source);  }我已經實現了一個轉換器Converter<String, MyClass>,它也可以工作。如果字符串可以轉換為 MyClass,則將其轉換,如果不能,則拋出異常,并將 的實例FieldError包含在Errors errors = binder.getBindingResult();. 問題是,FieldError#getRejected方法 aString包含有效值和無效值的逗號分隔列表,這可能會產生誤導。而且沒有空格,這太難看了。像這樣:Field has invalid value of "valid,invalid"雖然我更愿意Field has invalid value of "invalid"換句話說,如何讓轉換和驗證對每個值單獨進行?
查看完整描述

1 回答

?
小唯快跑啊

TA貢獻1863條經驗 獲得超2個贊

雖然spring的做法不是很智能,但是邏輯上是正確的。以下代碼可以幫助您找到無效值。


            FieldError fieldError = bindingResult.getFieldError();

            if (fieldError != null && fieldError.contains(TypeMismatchException.class)) {

                TypeMismatchException typeMismatchException = fieldError.unwrap(TypeMismatchException.class);

                ConversionFailedException conversionFailedException = findConversionFailedException(typeMismatchException);

                if (conversionFailedException != null) {

                    Object value = conversionFailedException.getValue();

                    // get the invalid field value

                }

            }

    /**

     * Recursively find the ConversionFailedException

     * @param target

     * @return

     */

    public ConversionFailedException findConversionFailedException(Throwable target) {

        Throwable cause = target.getCause();

        if (cause == null) {

            return null;

        } else if (cause instanceof ConversionFailedException) {

            return (ConversionFailedException)cause;

        }

        return findConversionFailedException(target);

    }


查看完整回答
反對 回復 2023-09-06
  • 1 回答
  • 0 關注
  • 107 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號