随着Rest服务的不断流行,Rest请求地址被捕获后,可以通过Rest地址直接向后台发送请求。因此后台数据验证就有了必要性。hibernate validator是对JSR 349 - Bean Validation 1.1验证API的一个实现。以下是基于SpringMVC和hibernate validator对后台数据验证的实现。
1.配置Spring MVC文件
<?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:context="http://www.springframework.org/schema/context" xmlns:p="http://www.springframework.org/schema/p" xmlns:mvc="http://www.springframework.org/schema/mvc" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-4.0.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-4.0.xsd http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc-4.0.xsd"> <!-- 配置需要扫描的类,不扫描用@Service或Repository声明的类,统一使用ApplicationContext中的 --> <context:component-scan base-package="com"> <context:exclude-filter type="annotation" expression="org.springframework.stereotype.Service"/> <context:exclude-filter type="annotation" expression="org.springframework.stereotype.Repository"/> </context:component-scan> <!-- 按照entity的名称分别指定国际化文件的位置--> <bean id="messageSource" class="org.springframework.context.support.ReloadableResourceBundleMessageSource"> <property name="defaultEncoding" value="UTF-8"/> <property name="basenames"> <bean class="com.MessagesGenerator" factory-method="getMessagesByClassPath"> <constructor-arg value="classpath:messages/message*.xml"/> </bean> </property> </bean> <!-- setting validation implementor,actually HibernateValidator is java validation interface default implementor--> <bean id="globalValidator" class="org.springframework.validation.beanvalidation.LocalValidatorFactoryBean"> <property name="providerClass" value="org.hibernate.validator.HibernateValidator"/> <property name="validationMessageSource" ref="messageSource"/> </bean> <mvc:annotation-driven validator="globalValidator"> <mvc:message-converters register-defaults="true"> <!-- 将StringHttpMessageConverter的默认编码设为UTF-8 --> <bean class="org.springframework.http.converter.StringHttpMessageConverter"> <constructor-arg value="UTF-8" /> </bean> <!-- 将Jackson2HttpMessageConverter的默认格式化输出设为true --> <bean class="org.springframework.http.converter.json.MappingJackson2HttpMessageConverter"> <property name="prettyPrint" value="true"/> </bean> </mvc:message-converters> </mvc:annotation-driven> <!-- 容器默认的DefaultServletHandler处理 所有静态内容与无RequestMapping处理的URL--> <mvc:default-servlet-handler /> <!-- 根据类型查找HandlerMapping --> <bean class="org.springframework.web.servlet.mvc.annotation.DefaultAnnotationHandlerMapping" /> <!-- 返回逻辑视图解析,将逻辑视图名称解析为文件路径 --> <bean id="viewResolver" class="org.springframework.web.servlet.view.InternalResourceViewResolver"> <property name="viewClass" value="org.springframework.web.servlet.view.JstlView" /> <property name="prefix" value="/" /> <property name="suffix" value=".jsp"></property> </bean> </beans>
使用MessagesGenerator扫描路径:classpath:messages/message*.xml下,所有以message开头的国际化文件。
package com; import java.io.IOException; import java.util.ArrayList; import java.util.List; import org.springframework.core.io.Resource; import org.springframework.core.io.support.PathMatchingResourcePatternResolver; import org.springframework.core.io.support.ResourcePatternResolver; import org.springframework.util.StringUtils; public class MessagesGenerator { /** * 使用ano注解获取所有的文件路径 * @param path * @return * @throws IOException */ public static List<String> getMessagesByClassPath(String path) throws IOException{ if(!StringUtils.hasLength(path)||!path.startsWith("classpath")){ return new ArrayList<String>(); } List<String> messages = new ArrayList<String>() ; ResourcePatternResolver resolver = new PathMatchingResourcePatternResolver() ; Resource[] resources = resolver.getResources(path) ; String tempPath = null ; for (Resource resource : resources) { if(!resource.getFile().exists()){ continue; } tempPath = resource.getFile().getPath() ; tempPath = tempPath.substring(tempPath.indexOf("classes\\")+8,tempPath.lastIndexOf(".")) ; messages.add("classpath:"+tempPath) ; } return messages ; } }
2.Customer实体对象
package com.entity; import javax.persistence.Column; import javax.persistence.Entity; import javax.persistence.Id; import javax.validation.constraints.NotNull; import com.fasterxml.jackson.annotation.JsonFormat; @Entity public class Customer { //不使用自动生成ID的方式 @Id private int id ; @NotNull(message="{costomer_name_not_null}") private String name ; private int age ; //使用jackson的json注解声明Date类型的格式 @JsonFormat(pattern="yyyy-MM-dd") private Date birthday ; @Column(name="bank_deposit") private double bankDeposit ; .....省略set和get方法 }
3.国际化提示文件,message_customer.xml放到class目录的bundle文件夹下,内容如下:
<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE properties SYSTEM "http://java.sun.com/dtd/properties.dtd"> <properties> <comment>客户信息</comment> <entry key="costomer_name_not_null">不能为空</entry> </properties>
使用xml文件,而不是用properties文件原因:1.xml文件在操作系统中更容易编辑;2.xml文件可读性比较强。3.将xml文件根据实体名称分别存储,便于维护。
4.Controller类
package com.controller; import javax.validation.Valid; import org.springframework.stereotype.Controller; import org.springframework.validation.BindingResult; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.ResponseBody; import com.entity.Customer; @Controller @RequestMapping("/customer/") public class CustomerController { /** * 使用@Valid注解声明需要验证的实体类,BindingResult封装了验证的结果 */ @RequestMapping("validate") @ResponseBody public String validateCustomer(@Valid Customer customer,BindingResult bindingResult){ if(bindingResult.hasErrors()){ System.out.println("错误->"+bindingResult.getAllErrors().get(0).getDefaultMessage()); return bindingResult.getAllErrors().get(0).getDefaultMessage() ; } return "OK"; } }
Spring与hibernate validator相关reference文件见附件。
相关推荐
这允许我们在模型类(通常是用户实体类)中添加注解,来定义验证规则。 例如,我们可以创建一个`User`类,包含用户名、密码、电子邮件等字段,并为每个字段添加相应的验证注解: ```java public class User { @...
- 定义验证约束:在用户实体类中使用Hibernate Validator的注解声明验证规则。 - 配置验证:在Spring MVC配置中添加Hibernate Validator的依赖。 - 控制器处理:在控制器方法中,使用`@Valid`注解对用户提交的...
SpringMVC提供了两种主要的验证方式:基于`Validator`接口的验证和使用JSR-303注解的标准验证。下面我们将详细介绍这两种验证方式。 ### 一、基于`Validator`接口的验证 1. **创建模型类(Model)** 首先,我们...
在练习代码中,你可能看到与数据库交互的实体类和DAO接口。 4. **控制器(Controller)**:控制器处理HTTP请求,调用业务逻辑,然后将结果返回给视图。在SpringMVC中,控制器通常由带有`@Controller`注解的Java类实现...
创建一个实体类,例如`User`,并使用JSR-303/JSR-349注解(这些是Validation API的一部分)来指定验证规则。例如: ```java public class User { @NotNull private String name; @Email @NotNull private ...
SpringMVC和Hibernate是Java开发中常用的两个框架,SpringMVC负责处理Web应用中的Controller层,而Hibernate则是ORM(对象关系映射)框架,用于管理数据库操作。将这两个框架整合在一起,可以构建出高效且易于维护的...
Spring Security是一个强大的安全框架,可以集成到SpringMVC中,提供身份验证、授权等功能。 7. **持久化(Persistence)** 存储用户信息通常需要用到数据库。SpringMVC可以与Spring Data JPA或Hibernate等ORM工具...
通过分析和运行这个示例,你将能更深入地理解和掌握SpringMVC框架的各个方面,包括但不限于模型绑定、数据验证、视图解析、AOP(面向切面编程)、依赖注入以及MVC的完整流程。这将为你的Java Web开发技能打下坚实的...
在MVC模式中,“模型”负责处理业务逻辑和数据管理,通常由JavaBeans或实体类表示;“视图”负责呈现用户界面,如JSP页面;而“控制器”则是接收请求并调用模型处理,最后决定哪个视图应被渲染。在SpringMVC中,这些...
SpringMVC和Hibernate是Java开发中的两个重要框架,SpringMVC负责处理Web应用的请求-响应,而Hibernate则是一个强大的对象关系映射(ORM)工具,用于简化数据库操作。这个"springmvc+hibernate完整项目"是一个整合了...
SpringMVC的特性包括依赖注入、AOP(面向切面编程)、数据验证和国际化支持等。 Hibernate作为ORM框架,简化了Java与数据库之间的交互。它允许开发者用Java对象来表示数据库中的记录,通过Hibernate API进行增删改...
此外,SpringMVC还支持多种视图技术,如JSP、Thymeleaf等,以及模型数据的自动绑定和验证。 【Hibernate】 Hibernate是一个Java持久化框架,它简化了数据库操作,提供了对象关系映射(ORM)功能。开发者可以使用...
客户端应用(即我们的SpringMVC应用)则通过集成CAS客户端库来与服务器进行交互,验证用户的凭证并管理会话。 1. **集成CAS客户端** - Maven依赖:在项目中添加CAS客户端库的Maven依赖,例如`jasig-cas-client`,...
12. **单元测试和整合测试**: SpringMVC提供了方便的测试支持,如MockMVC可以模拟HTTP请求,对控制器进行单元测试,而整合测试则可以验证整个Web应用的正确性。 通过学习和实践SpringMVC,开发者能够构建出高效、可...
5. **实体类和Mapper接口**:创建Java实体类来表示数据库表中的记录,然后为每个实体类创建一个Mapper接口,接口中声明对应的数据操作方法。 6. **编写Service层**:在Service层中,利用Spring的DI特性注入DAO,...
SpringMVC 和 Hibernate 是两种非常重要的 Java Web 开发框架,SpringMVC 用于处理前端请求,而 Hibernate 则是用于管理后端数据持久化的 ORM(对象关系映射)框架。在实际开发中,将两者整合可以实现高效、灵活的...
1. **src/main/java**:这里存放所有Java源代码,包括控制器(Controller)、服务层(Service)、持久层(DAO)以及实体类(Entity)。 2. **src/main/resources**:配置文件和资源文件的存放地,如数据库连接配置...
在本文中,我们将深入探讨如何在SpringMVC框架中实现注解式的权限验证。SpringMVC是Java领域中广泛使用的Web开发框架,它为开发者提供了强大的功能,包括模型-视图-控制器(MVC)架构、依赖注入以及丰富的注解支持。...
在实际项目中,整合SpringMVC、Security和Hibernate时,首先需要在Spring的配置文件中引入相应的依赖和配置,如数据源、SessionFactory、Hibernate实体扫描路径等。接着,设置SpringMVC的拦截器和视图解析器。然后...