Welcome!

Java IoT Authors: Pat Romanski, Zakia Bouachraoui, William Schmarzo, Elizabeth White, Yeshim Deniz

Related Topics: Java IoT, Industrial IoT, Microservices Expo, Open Source Cloud, Machine Learning , Agile Computing

Java IoT: Blog Post

JavaBean Validation with javax Annotation and Hibernate Validator

Java EE 6 platform provides a set of annotations for bean validation

As you know modern programming paradigm suggests validating a java bean with annotations. A java bean can be validated in many ways. You can refer to my earlier article on bean validation .But we have to opt for the simplest and the robust one. With the introduction of java annotation feature, programming has become easier and lets developers to write less code. In this article I will show you the significance of Hibernate validator and javax annotation in a java bean. The api provided by hibernate validator and javax annotation has made developer’s life much easier to put validation instantly.

Java EE 6 platform provides a set of annotations for bean validation. This bean validation API can be applied to field and method level to achieve validation. Apart from that Hibernate validator provides some extra validation annotation to ease the development and also it provides the shortcut way define your own custom validation constraints.  The javax bean validation api provides below the most frequently used annotations.

javax.validation.constraints.Digits

javax.validation.constraints.Min

javax.validation.constraints.Max

javax.validation.constraints.NotNull

javax.validation.constraints.DecimalMax

javax.validation.constraints.DecimalMin

javax.validation.constraints.Pattern

javax.validation.constraints.Null

javax.validation.constraints.Size

Hibernate validator provides below the commonly used annotations for validation.

org.hibernate.validator.constraints.URL

org.hibernate.validator.constraints.NotEmpty

org.hibernate.validator.constraints.NotBlank

org.hibernate.validator.constraints.Length

org.hibernate.validator.constraints.Email

org.hibernate.validator.constraints.CreditCardNumber

In case of product or project development we have to use both the annotations for bean validation. It is always recommended to use the relevant annotations in the field level of the java bean as it increases the readability and minimizes the burden of bug fixing and maintenance problem.

How to do

In order to achieve bean validation, you have to use javax bean validation api, hibernate validator api and logging api. For the usage of this validation, you have use the following jar files mentioned below.

hibernate-validator-4.3.1.Final.jar

jboss-logging-3.1.0.CR2.jar

validation-api-1.0.0.GA.jar

All the above jar files can be downloaded from the site “mvnrepository.com”. If you are using maven project, you have to use the following dependencies as mentioned below.

<dependencies>

<dependency>

<groupId>junit</groupId>

<artifactId>junit</artifactId>

<version>4.11</version>

<scope>test</scope>

</dependency>

<dependency>

<groupId>org.hibernate</groupId>

<artifactId>hibernate-validator</artifactId>

<version>4.3.1.Final</version>

</dependency>

</dependencies>

The dependency for junit is optional as it depends upon your project requirement.

Let us see a brief structure of a bean provided with various annotations.

public class Bean1 {

// ~~~~~~~~~~ javax annotations for validation ~~~~~~~~~~

@Digits(integer = 2, fraction = 0, message = "The value of age can not be more than 2 digits")

@Min(value = 18, message = "The minimum age should be 18")

@Max(value = 50, message = "The maximum age can not more than be 50")

private int age;

@NotNull(message = "First Name can not be null ... ")

private String firstName;

@DecimalMax(value = "99999.999", message = "The decimal value can not be more than 99999.999 ")

@DecimalMin(value = "1.00", message = "The decimal value can not be less than 1.00 digit ")

private float amount = 0f;

@NotNull

@Pattern(regexp = "^\\d{6}", message = "Invalid zip code, Indian zip code should be 6 digit")

private String zipCode;

// ~~~~~~~~~~ Hibernate provided annotations for validation ~~~~~~~~~~

@CreditCardNumber(message = "Invalid credit card number")

private String creditCard;

@Email(message = "Invalid email id")

private String emailId;

@Length(max = 50, min = 10, message = "The message description should be within 10 to 50 characters")

private String description;

@NotBlank(message = "SurName can not be blank")

// It is only applicable to String

private String surName;

@NotEmpty(message = "The list can not be empty")

private List<String> countryList;

@URL(message = "Invalid website address")

private String website;

// ~~~~~~~~~~ Custom annotations for validation ~~~~~~~~~~

@Password

private String password;

@IBAN

private String ibanActNo;

// ~~ getter and setter methods below

}

The above java class contains many fields which require validations. If the above bean is populated with data, we have to validate the bean with the default validator provided by hibernate api. The brief code structure is given below.

ValidatorFactory factory = Validation.buildDefaultValidatorFactory();

Validator validator = factory.getValidator();

Set<ConstraintViolation<Bean1>> set = validator.validate(bean);

noOfViolations = set.size();

if (noOfViolations != 0)

throw new BeanValidationFailedException(set);

The above code is very precise and provides the a set of violations. This is all about the default annotations provided. What about your own custom annotations which may be required as per your project requirements ? Javax bean validation api provides the easiest way to define and integrate your own annotations for validation. Let us take an example of password. The rule for password is it should be within 6 to 20 characters, one special character, one upper case and one numeric character. For this purpose we have define an annotation called “Password” and we have to define one java class called “PasswordValidator” by implementing “javax.validation.ConstraintValidator”. That’s it. You are done now. You can now freely use your annotation n any java bean. Let us see the brief code structure for the above.

@Target({ METHOD, FIELD, ANNOTATION_TYPE })

@Retention(RUNTIME)

@Constraint(validatedBy = PasswordValidator.class)

public @interface Password {

/**

* This method is used to provide a default message

*

* @return

*/

String message() default "{Invalid password, valid password : one Upper case, one special char, one number, total length 6 t0 20 chars}";

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

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

}

The above is the password annotation, the password validator class is given below.

public class PasswordValidator implements ConstraintValidator<Password, String> {

public void initialize(Password pwd) {

// do nothing

}

public boolean isValid(String str, ConstraintValidatorContext ctx) {

//Write your own business logic

return validate(str);

}

}

The complete project for the validation can be downloaded from the following link.

Download project https://www.dropbox.com/s/r4dgtz49bxyrpvw/javaxbeanvalidation.zip

You can download the complete project, extract it and import the project as maven project. If you have internet you can run the project with the command “clean compile install”. If you want to manually run the project, run the java class “App.java”.  If you do not want maven project, download all the above mentioned jar files and put the jar files inside a folder called “lib” inside your eclipse project and set the eclipse build path. In this project I have defined two custom annotations, you can also define you own annotations and test the application.

Conclusion

This article is meant for the novice user. It will give you a cleaner approach of using javax annotation and hibernate validator for the bean validation. I hope you will enjoy my article, For any queries contact me on [email protected].

<>Refences

 

http://docs.oracle.com/javaee/6/api/javax/validation/constraints/package-tree.html

http://docs.oracle.com/javaee/6/api/javax/validation/constraints/package-summary.html

http://docs.jboss.org/hibernate/validator/4.1/api/org/hibernate/validator/constraints/package-summary.html

http://docs.oracle.com/javaee/6/tutorial/doc/gircz.html

More Stories By Debadatta Mishra

Debadatta Mishra is a senior Java developer with five years of experience in the field of Java and related technologies. He has written many articles on Java-related technologies on the Internet.

IoT & Smart Cities Stories
Codete accelerates their clients growth through technological expertise and experience. Codite team works with organizations to meet the challenges that digitalization presents. Their clients include digital start-ups as well as established enterprises in the IT industry. To stay competitive in a highly innovative IT industry, strong R&D departments and bold spin-off initiatives is a must. Codete Data Science and Software Architects teams help corporate clients to stay up to date with the mod...
Tapping into blockchain revolution early enough translates into a substantial business competitiveness advantage. Codete comprehensively develops custom, blockchain-based business solutions, founded on the most advanced cryptographic innovations, and striking a balance point between complexity of the technologies used in quickly-changing stack building, business impact, and cost-effectiveness. Codete researches and provides business consultancy in the field of single most thrilling innovative te...
Darktrace is the world's leading AI company for cyber security. Created by mathematicians from the University of Cambridge, Darktrace's Enterprise Immune System is the first non-consumer application of machine learning to work at scale, across all network types, from physical, virtualized, and cloud, through to IoT and industrial control systems. Installed as a self-configuring cyber defense platform, Darktrace continuously learns what is ‘normal' for all devices and users, updating its understa...
At CloudEXPO Silicon Valley, June 24-26, 2019, Digital Transformation (DX) is a major focus with expanded DevOpsSUMMIT and FinTechEXPO programs within the DXWorldEXPO agenda. Successful transformation requires a laser focus on being data-driven and on using all the tools available that enable transformation if they plan to survive over the long term. A total of 88% of Fortune 500 companies from a generation ago are now out of business. Only 12% still survive. Similar percentages are found throug...
CloudEXPO has been the M&A capital for Cloud companies for more than a decade with memorable acquisition news stories which came out of CloudEXPO expo floor. DevOpsSUMMIT New York faculty member Greg Bledsoe shared his views on IBM's Red Hat acquisition live from NASDAQ floor. Acquisition news was announced during CloudEXPO New York which took place November 12-13, 2019 in New York City.
OpsRamp is an enterprise IT operation platform provided by US-based OpsRamp, Inc. It provides SaaS services through support for increasingly complex cloud and hybrid computing environments from system operation to service management. The OpsRamp platform is a SaaS-based, multi-tenant solution that enables enterprise IT organizations and cloud service providers like JBS the flexibility and control they need to manage and monitor today's hybrid, multi-cloud infrastructure, applications, and wor...
The Master of Science in Artificial Intelligence (MSAI) provides a comprehensive framework of theory and practice in the emerging field of AI. The program delivers the foundational knowledge needed to explore both key contextual areas and complex technical applications of AI systems. Curriculum incorporates elements of data science, robotics, and machine learning-enabling you to pursue a holistic and interdisciplinary course of study while preparing for a position in AI research, operations, ...
Atmosera delivers modern cloud services that maximize the advantages of cloud-based infrastructures. Offering private, hybrid, and public cloud solutions, Atmosera works closely with customers to engineer, deploy, and operate cloud architectures with advanced services that deliver strategic business outcomes. Atmosera's expertise simplifies the process of cloud transformation and our 20+ years of experience managing complex IT environments provides our customers with the confidence and trust tha...
With the introduction of IoT and Smart Living in every aspect of our lives, one question has become relevant: What are the security implications? To answer this, first we have to look and explore the security models of the technologies that IoT is founded upon. In his session at @ThingsExpo, Nevi Kaja, a Research Engineer at Ford Motor Company, discussed some of the security challenges of the IoT infrastructure and related how these aspects impact Smart Living. The material was delivered interac...
Intel is an American multinational corporation and technology company headquartered in Santa Clara, California, in the Silicon Valley. It is the world's second largest and second highest valued semiconductor chip maker based on revenue after being overtaken by Samsung, and is the inventor of the x86 series of microprocessors, the processors found in most personal computers (PCs). Intel supplies processors for computer system manufacturers such as Apple, Lenovo, HP, and Dell. Intel also manufactu...