Skip to content

srgg/js2jsr303

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

5 Commits
 
 
 
 
 
 
 
 
 
 

Repository files navigation

js2jsr303

Thoughts(PoC) kind of DSL (JavaScript) for data validation on POJO'less Java backend.

Here is an example of field metadata:

{
    "name": "integerField",
    "type": "INTEGER",
    "validator": "decimalMin({value: '0'}) && decimalMax({value: '10'}) && exact5()"
}

Field "validator" contains a mixture of JSR-303 validation constraints and user validator 'exact5'. The 'exact5' validator was implemented as following javascript function:

function exact5(message){
    if (currentFieldValue != '5') {
        if(typeof message === 'undefined'){
            message = "Values must be exactly '5'";
        }
        __validator.addViolation('t', message, null);
        return false;
    }
    return true;
}

This JS function uses two of three implicit objects which are currently available in JS context as global vars:

  • __validator - corresponding instance of Validator which performs validation;
  • current Field - metadata for a validating field;
  • currentFieldValue - value which is currently validated.

Entity validation might be performed as follows:

final EntityInfo ei;
final String exact5str // <-- place JS

AbstractValidator validator = new HibernateValidator(){
        @Override
        protected void onInit() throws Exception {
            super.onInit();
            registerScript(exact5str);
        }
    };

final Set<ConstraintViolation> violations = validator.validate(ei, (Map<String, Object>) values);
if(violations != null){
    // Something invalid
}

You can find more examples in ProofOfUsageFieldValueValidationScenariosTest.java

About

No description, website, or topics provided.

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages