2017-05-09 7 views
1

以下のtry/catchブロックがあると、実際のメソッドスコープでreturn !dateToDate.before(dateFromDate) && dateFromDate.before(dateToDate);の値を返すにはどうすればよいですか?私が虚偽に戻ることを望みます。私はそれが欲しいところ、すなわちreturn falseが現在どこにあるのか、適切な戻り値を含めることはできません。カスタムSpring Validatorの値を返すときのトラブル

public class YourDateValidator implements ConstraintValidator<ValidDates, 
     TypeToBeValidated> { 

    @Override 
    public void initialize(ValidDates constraintAnnotation) { 

    } 

    @Override 
    public boolean isValid(TypeToBeValidated value, ConstraintValidatorContext context) { 
     String dateTo = value.getDateTo(); 
     String dateFrom = value.getDateFrom(); 

     SimpleDateFormat formatter = new SimpleDateFormat(DateUtil.dateFormat); 
     Date dateToDate = null; 
     Date dateFromDate = null; 
     try { 
      dateFromDate = formatter.parse(dateFrom); 
      dateToDate = formatter.parse(dateTo); 
      return !dateToDate.before(dateFromDate) && dateFromDate.before(dateToDate); 
     } catch (ParseException e) { 
      e.printStackTrace(); 
     } 

     return false; 
    } 

} 

希望コード:

@Override 
    public boolean isValid(TypeToBeValidated value, ConstraintValidatorContext context) { 
     String dateTo = value.getDateTo(); 
     String dateFrom = value.getDateFrom(); 

     SimpleDateFormat formatter = new SimpleDateFormat(DateUtil.dateFormat); 
     Date dateFromDate = formatter.parse(dateFrom); 
     Date dateToDate = formatter.parse(dateTo); 
     return !dateToDate.before(dateFromDate) && dateFromDate.before(dateToDate); 
    } 

私は@Overriden isValidクラスではParseExceptionをスローすることはできません。しかし、私は戻り値をフォーマッタのtry/catchブロックに入れることはできません。私は何をすべきか?

答えて

2

チェックされた例外をキャッチする必要があるため、必要な実装はできません。あなたが本当にメソッド外の例外を処理したい場合は、代わりに

@Override 
public boolean isValid(TypeToBeValidated value, ConstraintValidatorContext context) { 
    String dateTo = value.getDateTo(); 
    String dateFrom = value.getDateFrom(); 

    SimpleDateFormat formatter = new SimpleDateFormat(DateUtil.dateFormat); 
    Date dateToDate = null; 
    Date dateFromDate = null; 
    boolean valid = false; 
    try { 
     dateFromDate = formatter.parse(dateFrom); 
     dateToDate = formatter.parse(dateTo); 
     valid = !dateToDate.before(dateFromDate) && dateFromDate.before(dateToDate); 
    } catch (ParseException e) { 
     e.printStackTrace(); 
    } 

    return valid; 
} 

:あなたの目標は、メソッドを形成するだけで、単一のリターンポイントを持つことであるなら、あなたはあなたがtry/catchブロックに割り当てた結果変数を使用することができます、あなたはチェックされない例外としてそれを再スローすることができます

@Override 
public boolean isValid(TypeToBeValidated value, ConstraintValidatorContext context) { 
    String dateTo = value.getDateTo(); 
    String dateFrom = value.getDateFrom(); 

    SimpleDateFormat formatter = new SimpleDateFormat(DateUtil.dateFormat); 
    Date dateToDate = null; 
    Date dateFromDate = null; 
    try { 
     dateFromDate = formatter.parse(dateFrom); 
     dateToDate = formatter.parse(dateTo); 
     return !dateToDate.before(dateFromDate) && dateFromDate.before(dateToDate); 
    } catch (ParseException e) { 
     throw new RuntimeException(e); 
    } 
} 
1

私はあなたが常にこのような何か使用することをお勧め:なぜ、とあなたは常に、知っているよ。この場合

@Override 
public boolean isValid(TypeToBeValidated value, ConstraintValidatorContext context) { 
    String dateTo = value.getDateTo(); 
    String dateFrom = value.getDateFrom(); 

    SimpleDateFormat formatter = new SimpleDateFormat(DateUtil.dateFormat); 
    boolean isValid = false; 
    try { 
     Date dateFromDate = formatter.parse(dateFrom); 
     Date dateToDate = formatter.parse(dateTo); 
     isValid = dateFromDate.before(dateToDate); 
     if(isValid) { 
      return true; 
     } 

     context.buildConstraintViolationWithTemplate(
       String.format("Error: dateFromDate (%s) is not before dateToDate (%s)!", 
        dateFromDate.toString(), 
        dateToDate.toString() 
       ) 
      ) 
      .addConstraintViolation(); 
     } 
    } catch (ParseException e) { 
     context.buildConstraintViolationWithTemplate(
       String.format("Exception while validating dateFromDate (%s), dateToDate (%s)! Reason: %s", 
        dateFromDate.toString(), 
        dateToDate.toString(), 
        e.getMessage() 
       ) 
      ) 
      .addConstraintViolation(); 
    } 

    return false; 
} 

をvaildationが失敗したデータ

関連する問題