Reputation: 505
I have the following error
javax.validation.UnexpectedTypeException: HV000030: No validator could be found for constraint 'javax.validation.constraints.Size' validating type 'java.lang.Integer'. Check configuration for 'discounted'
My code is:
@Column(name= "discount_percentage")
@Size(min=0, max=90)
@Min(0)
@Max(90)
private Integer discountPercentage = 0;
I set it to 0 because i was getting a NullPointerException when loading my view. And is Integer because i was reading in others question, and some people says that sometimes there are problems when using @Size with primitive types.
What should i do? Thanks in advance.
Upvotes: 32
Views: 70022
Reputation: 945
I have observed this pattern when, the parameter type does not match with validator. as here List<String>
is not matiching List<Long>
Ex Validator:
public class MaxValidation implements ConstraintValidator<MaxParameterSize, List<String>> {
....
}
Annotation Use :
public Response abc(@NotNull @MaxParameterSize(10) List<Long> parcelIds {
....
}
Upvotes: 1
Reputation: 7235
@Size
is a Bean Validation annotation that validates that the associated String
has a value whose length
is bounded by the minimum and maximum
values. And as your exception
says it does not apply to Integer
type.
Use: @Range
@Column(name= "discount_percentage")
@Range(min=0, max=90)
private Integer discountPercentage = 0;
Or you cloud also use only @Max or @Min
and that will work too. For more info please take a look on this link.
Upvotes: 47
Reputation: 18235
@Size
is not used to validate min/max.
It's used to validate size of collections, length of strings, etc.
In this case you should use @Min
, @Max
instead.
Refer here for complete document: https://docs.oracle.com/javaee/7/api/javax/validation/constraints/Size.html
Upvotes: 16