Frage

In my Spring Application, i'm Using Hibernate Validator for Validation Purpose.

When i'm doing simple Validation like @NotEmpty, @Email .. i'm easily working

But When coming to Date field, giving Problem...

Problem is in my Jsp page i'm getting values type as String then i'm convert String to Date..

Hear is my Example...

@NotEmpty(message = "Write Some Description")
private String description;

private String fromDateMonth;

private String fromDateYear;

private String toDateMonth;

private String toDateYear;

i'm converting this fromDateMonth and fromDateYear into Date in this my Controller class.

So is their any Possibility to add Validator Annotation in Controller class?

Other wise what should i'm do hear? give me suggestions...

War es hilfreich?

Lösung

If you want to validate that fromDate is before toDate, you can write a custom validator to perform this multi-field validation. You write a custom validator, and you also define a custom annotation which is placed on the bean being validated.

See the following answers for more information.

Andere Tipps

For sure you can use Bean Validation inside your controller, just add an annotation on the property like you did in your model. But the best way would be use a Date type in your model instead of string.

Based on the number of times the question is displayed, I conclude that a lot of people still end up here looking for a validator for a date range.

Suppose we have a DTO containing another DTO (or class with @Embeddable annotation) with two fields with LocalDate (or other date representation, it's only example).

class MyDto {

    @ValidDateRange // <-- target annotation
    private DateRange dateRange;
    
    // getters, setters, etc.
}
class DateRange {

    private LocalDate startOfRange;
    private LocalDate endOfRange;

    // getters, setters, etc.
}

Now, we can declare our own @ValidDateRange annotation:

@Documented
@Constraint(validatedBy = DateRangeValidator.class)
@Target({ElementType.FIELD})
@Retention(RetentionPolicy.RUNTIME)
@interface ValidDateRange {

    String message() default "Start date must be before end date";

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

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

Writing the validator itself also comes down to a few lines of code:

class DateRangeValidator implements ConstraintValidator<ValidDateRange, DateRange> {
    @Override
    public boolean isValid(DateRange value, ConstraintValidatorContext context) {
        return value.getStartOfRange().isBefore(value.getEndOfRange());
    }
}
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top