0

私はSpringブートを使用してRESTサービスを構築しました。エンドポイントの1つでは、リクエストパラメータと他の2つのパラメータを一緒に送信しています。転記後、要求パラメータはオブジェクトにバインドされます。日付はLocalDateフィールドにバインドされています。投稿後、バインディングの前に、私は検証とHibernate Validatorを使ってリクエストパラメータを検証するのが好きです。 LocalDateの有効な検証はありません。そのため、LocalDateのカスタム検証を書く必要があります。RESTエンドポイントパラメータの検証とカスタム検証によるLocalDateの比較

これは、エンドポイントに掲示する内容である:ここでは

/parameter-dates?parameterDateUnadjusted=2017-02-29&limit=5&direction=d 

は、エンドポイントのコードです:ここで

@GetMapping(value = "/parameter-dates") 
public ResponseEntity getParameterDates(@Valid ParameterDateRequest parameterDateRequest, Errors errors) { 
// DO SOME STUFF 
} 

は、オブジェクトのために使用されるモデルである:

@Component 
@Data 
public class ParameterDateRequest { 

    @MyDateFormatCheck(pattern = "yyyy-MM-dd", message = "Date not matching") 
    LocalDate parameterDateUnadjusted; 
    @NotEmpty(message = "Direction can't be empty") 
    String direction; 
    @Digits(integer=1, fraction=0, message = "Limit has to be an integer of max 100 000") 
    int limit; 
} 

これは検証アノテーションのコードです:

@Target({ FIELD, METHOD, PARAMETER, ANNOTATION_TYPE }) 
@Retention(RUNTIME) 
@Constraint(validatedBy = MyDateFormatCheckValidator.class) 
@Documented 
public @interface MyDateFormatCheck { 
    String pattern(); 
    String message(); 

    Class<?>[] groups() default {}; 

    Class<? extends Payload>[] payload() default {}; 
} 

これは、検証、それを自己のためのコード:これは間違ったアプローチ

public class MyDateFormatCheckValidator implements ConstraintValidator<MyDateFormatCheck, LocalDate> { 

    private MyDateFormatCheck check; 

    @Override 
    public void initialize(MyDateFormatCheck constraintAnnotation) { 
     this.check = constraintAnnotation; 
    } 

    @Override 
    public boolean isValid(LocalDate object, ConstraintValidatorContext constraintContext) { 
     if (object == null) { 
      return true; 
     } 

     return isValidDate(object, check.pattern()); 
    } 

    public static boolean isValidDate(LocalDate inDate, String format) { 
     // TEST IF inDate IS VALID RETURN TRUE/FALSE 
    } 
} 

ですか?プログラムは動作しません、それがエンドポイントに投稿されますとき、私はparameterDateUnadjustedが実際にStringいうよりLocalDateで推測し、その後、私のバリデータはinDateとしてStringを使用する必要がありますが、その後、私はStringにparameterDateUnadjustedのための私のモデルを変更する必要がありますLocalDateとして使用しています。私は本当にここに何をするのか分からない。助言がありますか?

答えて

0

あなたが探しているものは - DateTimeFormat注釈です。値がすでにLocalDateにバインドされている場合は、日付形式を検証する必要はありません。

関連する問題