J'ai un serveur Spring Boot et j'aimerais valider mes valeurs d'ici le printemps. En utilisant la validation @Size, je peux définir la taille maximale. Mais j'aimerais obtenir cette taille maximale de mon fichier application.property.
J'ai déjà essayé de charger cette valeur par "@Value (...)" mais je ne peux pas utiliser cette valeur dans le "@Size" champ.
@Value("${max.size.in.properties}")
private int MAX_SIZE;
@Size(max = 10)
private String description;
3 Réponses :
vous pouvez le faire comme ce post par réflexion java https: // www .baeldung.com / java-reflexion-change-annotation-params
Je ne pense pas que cela fonctionnera. L'annotation ne sera pas évaluée à chaque appel.
Cela n'est pas possible car les annotations nécessitent des expressions constantes ( static final ) et @Value ne peut pas être utilisé pour injecter des valeurs dans des champs finaux statiques.
Peut-être que ce projet pourrait vous aider: https://github.com/jirutka/validator-spring . Il vous permet d'utiliser Spring Expression Language avec la validation de bean.
Nous pouvons spécifier des contraintes par programmation en utilisant Hibernate Validator , qui est déjà disponible dans le chemin des classes lors de l'utilisation de spring-boot-starter-web.
Given:
Validator validator = configuration.addMapping( constraintMapping )
.buildValidatorFactory()
.getValidator();
Set<ConstraintViolation<MyObject>> constraintViolations =
validator.validate( myObjectInstance );
if (constraintViolations.size() > 0) {
... // handle constraint violations
}
Nous pouvons configurer des contraintes comme celle-ci:
@Value("${max.size.in.properties}")
private int MAX_SIZE;
HibernateValidatorConfiguration configuration = Validation
.byProvider( HibernateValidator.class )
.configure();
ConstraintMapping constraintMapping = configuration.createConstraintMapping();
constraintMapping.type( MyObject.class )
.property( "description", FIELD )
.constraint( new SizeDef().min( 1 ).max( MAX_SIZE ) );
et valider une instance de l'objet avec:
class MyObject {
private String description;
...
}
Pouvez-vous rendre plus précis, fournir plus de détails.