@Min and @Max validator is not working as the value is getting assigned to a static variable from the properties file. But it taking all the value and not validating.
OTPLengthAndExpiryDetail.java
package com.custom.store.sms.twillo.model;
import javax.validation.constraints.Max;
import javax.validation.constraints.Min;
import javax.validation.constraints.NotNull;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Component;
import org.springframework.validation.annotation.Validated;
@Component
@Validated
public class OTPLengthAndExpiryDetail {
@Min(value = 4 , message = "Value should be greater then then equal to 4")
@Max(value = 6 , message = "Value should be less then then equal to 6")
@NotNull(message = "It can not be null. Please provide no. in b/w 4 to 6")
@Value("${otp.length}")
private static Integer length;
@Min(value = 20 , message = "Value should be greater then equal to 20")
@Max(value = 180 , message = "Value should be less then equal to 180")
@NotNull(message = "It can not be null. Please provide no. in b/w 20 to 300")
@Value("${otp.expiryTime}")
private static Integer expiryTime;
public static Integer getLength() {
return length;
}
public void setLength(Integer length) {
OTPLengthAndExpiryDetail.length = length;
}
public static Integer getExpiryTime() {
return expiryTime;
}
public void setExpiryTime(Integer expiryTime) {
OTPLengthAndExpiryDetail.expiryTime = expiryTime;
}
}
application.properties
#1. ################ DB DETAILS ###############################
spring.jpa.hibernate.ddl-auto=update
spring.datasource.url=jdbc:mysql://remotemysql.com/q5UV1n69DW?useSSL=false
spring.datasource.username=q5
spring.datasource.password=ur
############################################################################
#2. ############## LOGGING DETAILS FOR APPLICATION #################
spring.h2.console.enabled=true
#logging.level.org.hibernate=debug
spring.jpa.show-sql=true
############################################################################
#3.############### TWILLO DETAILS FOR OTP #######################
#both below twillo details can't be null
twilio.accountSID=AC53bec33dc8bae99f8
twilio.authId=7c31ef0e28e75473
twilio.phoneNumber=16468634753
############################################################################
#4.############### OTP CONFIGURATION DETAILS #######################
#otp.length can not be null. Please provide no. in b/w 4 to 6
otp.length=4
#otp.expirytime can not be null. Please provide no. in b/w 20 to 300
otp.expiryTime=2000
otp.message=your otp is
############################################################################
build.gradle
plugins {
id 'org.springframework.boot' version '2.3.3.RELEASE'
id 'io.spring.dependency-management' version '1.0.10.RELEASE'
id 'java'
}
group = 'com.custom.store'
version = '0.0.1-SNAPSHOT'
sourceCompatibility = '1.8'
configurations {
compileOnly {
extendsFrom annotationProcessor
}
}
repositories {
mavenCentral()
}
dependencies {
implementation 'org.springframework.boot:spring-boot-starter-web'
implementation 'org.springframework.boot:spring-boot-starter-data-jpa'
implementation group: "com.twilio.sdk", name: "twilio", version : "7.47.2"
implementation('org.springframework.boot:spring-boot-starter-validation')
runtimeOnly 'mysql:mysql-connector-java'
compileOnly 'org.projectlombok:lombok'
//implementation "org.hibernate:hibernate-validator:6.1.5.Final"
annotationProcessor 'org.projectlombok:lombok'
testImplementation('org.springframework.boot:spring-boot-starter-test') {
exclude group: 'org.junit.vintage', module: 'junit-vintage-engine'
}
}
test {
useJUnitPlatform()
}
OTPProperties.java * it is the class where I am instantiating the custom Configuration*
package com.custom.store.sms.twillo.conf;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.context.annotation.PropertySource;
import org.springframework.stereotype.Component;
import org.springframework.validation.annotation.Validated;
import com.custom.store.sms.twillo.model.OTPLengthAndExpiryDetail;
import com.custom.store.sms.twillo.model.TwilioAccountAndAuthDetail;
@Component
@ConfigurationProperties
@PropertySource("classpath:application.properties")
public class OTPProperties {
//@Autowired
TwilioAccountAndAuthDetail twilio;
//@Autowired
OTPLengthAndExpiryDetail otp;
public TwilioAccountAndAuthDetail getTwilio() {
return twilio;
}
public void setTwilio(TwilioAccountAndAuthDetail twilio) {
this.twilio = twilio;
}
public OTPLengthAndExpiryDetail getOtp() {
return otp;
}
public void setOtp(OTPLengthAndExpiryDetail otp) {
this.otp = otp;
}
}
The Javax bean validation API provides the following most frequently used annotations. The Hibernate validator provides the following commonly used annotations for validation. In case of product or project development we must use both the annotations for bean validation.
Hibernate Validator allows to express and validate application constraints. The default metadata source are annotations, with the ability to override and extend through the use of XML. It is not tied to a specific application tier or programming model and is available for both server and client application programming.
According to chapter 3 section 1 of JSR-303:
Static fields and static methods are excluded from validation.
Therefore, length
and expiryTime
should not be designated as static
fields if you wish to apply validation to them.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With