Skip to content
Advertisement

Validation not working on spring boot and hibernate

I am new to spring boot and hibernate.I have declared a model class Office which is :

package com.ashwin.officeproject.model;
import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
import org.springframework.data.annotation.CreatedDate;
import org.springframework.data.annotation.LastModifiedDate;
import org.springframework.data.jpa.domain.support.AuditingEntityListener;
import javax.persistence.*;
import javax.validation.constraints.NotBlank;
import javax.validation.constraints.NotEmpty;
import javax.validation.constraints.NotNull;
import javax.validation.constraints.Size;

import java.util.Date;

@Entity
@Table(name = "office")
public class Office {

    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Long officeId;

    @NotEmpty(message = "{officename.notempty}")
    private String officeName;

    @NotNull
    private int officeNumber;

    /*@Size(min = 8, max = 72, message = "Your offc address between 8 and 72 characters long")*/
    /*@NotEmpty(message = "Please provide a offc name")*/
    private String officeAddress;

    public Office() {

    }

    //ommitted getters and setters
}

I have declared my first main starting class as:

package com.ashwin.officeproject;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.EnableAutoConfiguration;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.boot.autoconfigure.jdbc.DataSourceAutoConfiguration;
import org.springframework.context.MessageSource;
import org.springframework.context.annotation.Bean;
import org.springframework.context.support.ReloadableResourceBundleMessageSource;
import org.springframework.validation.beanvalidation.LocalValidatorFactoryBean;

@SpringBootApplication
public class OfficeProjectApplication {

    public static void main(String[] args) {
        SpringApplication.run(OfficeProjectApplication.class, args);
    }

    @Bean
    public MessageSource messageSource() {
        ReloadableResourceBundleMessageSource messageSource
          = new ReloadableResourceBundleMessageSource();

        messageSource.setBasename("classpath:messages");
        messageSource.setDefaultEncoding("UTF-8");
        return messageSource;
    }

    @Bean
    public LocalValidatorFactoryBean getValidator() {
        LocalValidatorFactoryBean bean = new LocalValidatorFactoryBean();
        bean.setValidationMessageSource(messageSource());
        return bean;
    }

}

My controller class is:

package com.ashwin.officeproject.controller;

import java.util.ArrayList;
import java.util.List;

import javax.validation.Valid;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.ui.ModelMap;
import org.springframework.validation.BindingResult;
import org.springframework.web.bind.annotation.ModelAttribute;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;

import com.ashwin.officeproject.model.Office;
import com.ashwin.officeproject.repository.OfficeRepsitory;

@Controller
public class MainController {

    @Autowired
    OfficeRepsitory officeRepository;


    @RequestMapping(value = { "/office"}, method = RequestMethod.GET)
    public String office(Model model) {
       model.addAttribute("offices", new Office()); 
      return "office";
    }

    @RequestMapping(value = "/addOffice", method = RequestMethod.POST)
    public String submit(@Valid @ModelAttribute("offices") Office office, 
      BindingResult result, ModelMap model) {
        if (result.hasErrors()) {
            return "error";
        }
        officeRepository.save(office);
        model.addAttribute("offices", new Office()); 
        return "office";
    }

}

I have a office.jsp page which is:

<%@ taglib prefix="form" uri="http://www.springframework.org/tags/form" %>
<jsp:include page="./header.jsp" />
 <style>
      .error {
         color: #ff0000;
      }

      .errorblock {
         color: #000;
         background-color: #ffEEEE;
         border: 3px solid #ff0000;
         padding: 8px;
         margin: 16px;
      }
   </style>
    <form:form method="POST"  action="/addOffice"   modelAttribute="offices"  >

             <table>
                <tr>
                    <td><form:label path="officeName">Name</form:label></td>
                    <td><form:input path="officeName"/></td>
                    <form:errors path = "officeName" cssClass = "error" />

                </tr>
                <tr>
                    <td><form:label path="officeNumber">Number</form:label></td>
                    <td><form:input path="officeNumber"/></td>


                </tr>
                <tr>
                    <td><form:label path="officeAddress">
                      Address</form:label></td>
                    <td><form:input path="officeAddress"/></td>


                </tr>
                <tr>
                    <td><input type="submit" value="Submit"/></td>
                </tr>
            </table>
        </form:form>


<jsp:include page="./footer.jsp" />    

My pom.xml is:

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>
    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>2.1.3.RELEASE</version>
        <relativePath/> <!-- lookup parent from repository -->
    </parent>
    <groupId>com.ashwin</groupId>
    <artifactId>OfficeProject</artifactId>
    <version>0.0.1-SNAPSHOT</version>
    <name>OfficeProject</name>
    <description>OfficeProject</description>

    <properties>
        <java.version>1.8</java.version>
    </properties>

    <dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-data-jpa</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>
<dependency>
    <groupId>org.hibernate</groupId>
    <artifactId>hibernate-validator</artifactId>
    <version>6.0.12.Final</version>
</dependency>
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-validation</artifactId>
</dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-devtools</artifactId>
            <scope>runtime</scope>
        </dependency>
        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
            <scope>runtime</scope>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
        </dependency>

        <dependency>
    <groupId>org.apache.tomcat.embed</groupId>
    <artifactId>tomcat-embed-jasper</artifactId>
</dependency>

<dependency>
    <groupId>javax.servlet</groupId>
    <artifactId>jstl</artifactId>
</dependency>
    </dependencies>

    <build>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
            </plugin>
        </plugins>
    </build>

</project>

When I click the submit button then if the input field in my form are empty,I wanted to validate my form and show the message below the input field like “Please provide valid office name” .But what is happening is that when i hit the submit button then it is going to my error.jsp page but it is not showing any validation message which i have declared above.My error page displaying is:

error.jsp

<%@ page language="java" contentType="text/html; charset=ISO-8859-1"
    pageEncoding="ISO-8859-1"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="ISO-8859-1">
<title>Insert title here</title>
</head>
<body>
<p>Error</p>
</body>
</html>      

I am not getting any error in my console in eclipse too.It is just redirecting me in error.jsp page when my form’s field is empty.

Advertisement

Answer

seems jar conflicts issue as org.hibernate.validator:hibernate-validator:jar(javax.validation:validation-api:jar is part of hibernate validator) is part of spring web dependency so no need to add extra dependency which might conflict so recommend to remove below dependencies and build project again by clean install(mvn clean install).

remove below dependencies:

<dependency>
    <groupId>org.hibernate</groupId>
    <artifactId>hibernate-validator</artifactId>
    <version>6.0.12.Final</version>
</dependency>
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-validation</artifactId>
</dependency>

and make sure you access error message below: not required braces and property name match with your actual message property name you defined.(camelcase matters with name).

@NotEmpty(message = "officename.notempty")
User contributions licensed under: CC BY-SA
5 People found this is helpful
Advertisement