Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

@Validated annotation not working

I'm trying to use the @Validated annotation to valid form data returned to a controller, but it fails to call the custom validator that I have created. Code below:

@PostMapping("/saveTransaction")
    public String saveTransaction(@ModelAttribute("transaction") 
@Validated Transactions transaction, BindingResult bindingResult) {

    if(bindingResult.hasErrors()) {
        System.out.println("Non formated form stuff.");
        return "transactions/transactionsForm";
    }

The code works if I manual call the Validator as in:

@PostMapping("/saveTransaction")
    public String saveTransaction(@ModelAttribute("transaction") Transactions transaction, BindingResult bindingResult) {
        validator.validate(transaction, bindingResult);
        if(bindingResult.hasErrors()) {
            System.out.println("Non formated form stuff.");
            return "transactions/transactionsForm";
        }

I am auto wiring my class and initializing the validator using the following code.

    @Autowired
    private TransactionService transactionService;

    @Autowired
    @Qualifier("transactionValidator")
    private Validator validator;

    @InitBinder
    private void initBinder(WebDataBinder binder) {
        binder.setValidator(validator);
    }

I have the following code in Spring.xml file:

    <mvc:annotation-driven validator="transactionValidator" />

    <bean id="transactionValidator" class="org.lexusmanson.lexbudget.validator.TransactionValidator" />

My current dependencies are:

   <properties>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
        <java.version>1.9</java.version>
        <failOnMissingWebXml>false</failOnMissingWebXml>
        <spring.version>5.0.1.RELEASE</spring.version>
        <hibernate.version>5.2.11.Final</hibernate.version>
        <hibernate.validator>5.4.1.Final</hibernate.validator>
        <c3p0.version>0.9.5.2</c3p0.version>
        <jstl.version>1.2.1</jstl.version>
        <tld.version>1.1.2</tld.version>
        <servlets.version>3.1.0</servlets.version>
        <jsp.version>2.3.1</jsp.version>
        <hsqldb.version>1.8.0.10</hsqldb.version>
        <aspectj.version>1.8.13</aspectj.version>
  </properties>

  <dependencies>
        <!-- Spring MVC Dependency -->
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-webmvc</artifactId>
            <version>${spring.version}</version>
        </dependency>

        <!-- Spring ORM -->
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-orm</artifactId>
            <version>${spring.version}</version>
        </dependency>

        <!-- Hibernate Core -->
        <dependency>
            <groupId>org.hibernate</groupId>
            <artifactId>hibernate-core</artifactId>
            <version>${hibernate.version}</version>
        </dependency>

        <!-- Hibernate-C3P0 Integration -->
        <dependency>
            <groupId>org.hibernate</groupId>
            <artifactId>hibernate-c3p0</artifactId>
            <version>${hibernate.version}</version>
        </dependency>

        <!-- c3p0 -->
        <dependency>
            <groupId>com.mchange</groupId>
            <artifactId>c3p0</artifactId>
            <version>${c3p0.version}</version>
        </dependency>

        <!-- Hibernate Validator -->
        <dependency>
            <groupId>org.hibernate</groupId>
            <artifactId>hibernate-validator</artifactId>
            <version>${hibernate.validator}</version>
        </dependency>

        <!-- JSTL Dependency -->
        <dependency>
            <groupId>javax.servlet.jsp.jstl</groupId>
            <artifactId>javax.servlet.jsp.jstl-api</artifactId>
            <version>${jstl.version}</version>
        </dependency>

        <dependency>
            <groupId>taglibs</groupId>
            <artifactId>standard</artifactId>
            <version>${tld.version}</version>
        </dependency>

        <!-- Servlet Dependency -->
        <dependency>
            <groupId>javax.servlet</groupId>
            <artifactId>javax.servlet-api</artifactId>
            <version>${servlets.version}</version>
            <scope>provided</scope>
        </dependency>

        <!-- JSP Dependency -->
        <dependency>
            <groupId>javax.servlet.jsp</groupId>
            <artifactId>javax.servlet.jsp-api</artifactId>
            <version>${jsp.version}</version>
            <scope>provided</scope>
        </dependency>

        <!-- HSQL Dependency -->
        <dependency>
            <groupId>hsqldb</groupId>
            <artifactId>hsqldb</artifactId>
            <version>${hsqldb.version}</version>
        </dependency>
        <dependency>
            <groupId>org.mariadb.jdbc</groupId>
            <artifactId>mariadb-java-client</artifactId>
            <version>2.2.0</version>
        </dependency>
        <dependency>
            <groupId>org.apache.tiles</groupId>
            <artifactId>tiles-extras</artifactId>
            <version>3.0.8</version>
        </dependency>
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-aop</artifactId>
            <version>${spring.version}</version>
        </dependency>
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-core</artifactId>
            <version>${spring.version}</version>
        </dependency>
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-context</artifactId>
            <version>${spring.version}</version>
        </dependency>
        <dependency>
            <groupId>org.aspectj</groupId>
            <artifactId>aspectjrt</artifactId>
            <version>${aspectj.version}</version>
        </dependency>
        <dependency>
            <groupId>org.aspectj</groupId>
            <artifactId>aspectjweaver</artifactId>
            <version>${aspectj.version}</version>
        </dependency>
  </dependencies>

Why won't the annotation call my validation code?

like image 236
Lex Man Avatar asked Mar 28 '26 07:03

Lex Man


2 Answers

Can you try with @valid annotation instead of @validated hope it will help.

like image 144
sreekumar v Avatar answered Mar 29 '26 20:03

sreekumar v


Change the code as mentioned below: Binding result should come after @Valid annotation

@PostMapping("/saveTransaction")
    public String saveTransaction(@Valid Transactions transaction, BindingResult bindingResult) {
        validator.validate(transaction, bindingResult);
        if(bindingResult.hasErrors()) {
            System.out.println("Non formated form stuff.");
            return "transactions/transactionsForm";
        }
like image 22
vipin cp Avatar answered Mar 29 '26 21:03

vipin cp



Donate For Us

If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!