`
lp895876294
  • 浏览: 284759 次
  • 性别: Icon_minigender_1
  • 来自: 济南
社区版块
存档分类
最新评论

SpringMVC实体验证

    博客分类:
  • JPA
 
阅读更多

       随着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文件见附件。

分享到:
评论

相关推荐

    SpringMVC数据验证——注册用户格式的验证实例

    这允许我们在模型类(通常是用户实体类)中添加注解,来定义验证规则。 例如,我们可以创建一个`User`类,包含用户名、密码、电子邮件等字段,并为每个字段添加相应的验证注解: ```java public class User { @...

    Springmvc数据验证6个详细包,hibernate-validator-5.1.3.Final.jar...

    - 定义验证约束:在用户实体类中使用Hibernate Validator的注解声明验证规则。 - 配置验证:在Spring MVC配置中添加Hibernate Validator的依赖。 - 控制器处理:在控制器方法中,使用`@Valid`注解对用户提交的...

    SpringMVC Validator验证示例

    SpringMVC提供了两种主要的验证方式:基于`Validator`接口的验证和使用JSR-303注解的标准验证。下面我们将详细介绍这两种验证方式。 ### 一、基于`Validator`接口的验证 1. **创建模型类(Model)** 首先,我们...

    springMVC练手代码

    在练习代码中,你可能看到与数据库交互的实体类和DAO接口。 4. **控制器(Controller)**:控制器处理HTTP请求,调用业务逻辑,然后将结果返回给视图。在SpringMVC中,控制器通常由带有`@Controller`注解的Java类实现...

    SpringMVC使用Validation验证表单

    创建一个实体类,例如`User`,并使用JSR-303/JSR-349注解(这些是Validation API的一部分)来指定验证规则。例如: ```java public class User { @NotNull private String name; @Email @NotNull private ...

    SpringMVC+Hibernate整合的登录Demo 导入即可直接运行适合初次接触整合

    SpringMVC和Hibernate是Java开发中常用的两个框架,SpringMVC负责处理Web应用中的Controller层,而Hibernate则是ORM(对象关系映射)框架,用于管理数据库操作。将这两个框架整合在一起,可以构建出高效且易于维护的...

    springMVC 注册登录源码

    Spring Security是一个强大的安全框架,可以集成到SpringMVC中,提供身份验证、授权等功能。 7. **持久化(Persistence)** 存储用户信息通常需要用到数据库。SpringMVC可以与Spring Data JPA或Hibernate等ORM工具...

    SpringMVC demo 完整源码实例下载

    通过分析和运行这个示例,你将能更深入地理解和掌握SpringMVC框架的各个方面,包括但不限于模型绑定、数据验证、视图解析、AOP(面向切面编程)、依赖注入以及MVC的完整流程。这将为你的Java Web开发技能打下坚实的...

    SpringMVC+Mysql实例详解

    在MVC模式中,“模型”负责处理业务逻辑和数据管理,通常由JavaBeans或实体类表示;“视图”负责呈现用户界面,如JSP页面;而“控制器”则是接收请求并调用模型处理,最后决定哪个视图应被渲染。在SpringMVC中,这些...

    springmvc+hibernate完整项目

    SpringMVC和Hibernate是Java开发中的两个重要框架,SpringMVC负责处理Web应用的请求-响应,而Hibernate则是一个强大的对象关系映射(ORM)工具,用于简化数据库操作。这个"springmvc+hibernate完整项目"是一个整合了...

    SpringMVC+hibernate实例

    SpringMVC的特性包括依赖注入、AOP(面向切面编程)、数据验证和国际化支持等。 Hibernate作为ORM框架,简化了Java与数据库之间的交互。它允许开发者用Java对象来表示数据库中的记录,通过Hibernate API进行增删改...

    springmvc+hibernate+easyui

    此外,SpringMVC还支持多种视图技术,如JSP、Thymeleaf等,以及模型数据的自动绑定和验证。 【Hibernate】 Hibernate是一个Java持久化框架,它简化了数据库操作,提供了对象关系映射(ORM)功能。开发者可以使用...

    cas client springmvc(springmvc cas maven sso 详解 )

    客户端应用(即我们的SpringMVC应用)则通过集成CAS客户端库来与服务器进行交互,验证用户的凭证并管理会话。 1. **集成CAS客户端** - Maven依赖:在项目中添加CAS客户端库的Maven依赖,例如`jasig-cas-client`,...

    SpringMVC框架案例

    12. **单元测试和整合测试**: SpringMVC提供了方便的测试支持,如MockMVC可以模拟HTTP请求,对控制器进行单元测试,而整合测试则可以验证整个Web应用的正确性。 通过学习和实践SpringMVC,开发者能够构建出高效、可...

    Spring+SpringMVC+Mybatis框架项目整合

    5. **实体类和Mapper接口**:创建Java实体类来表示数据库表中的记录,然后为每个实体类创建一个Mapper接口,接口中声明对应的数据操作方法。 6. **编写Service层**:在Service层中,利用Spring的DI特性注入DAO,...

    springmvc整合Hibernate的登录实例带表结构

    SpringMVC 和 Hibernate 是两种非常重要的 Java Web 开发框架,SpringMVC 用于处理前端请求,而 Hibernate 则是用于管理后端数据持久化的 ORM(对象关系映射)框架。在实际开发中,将两者整合可以实现高效、灵活的...

    简单的SpringMVC小项目(适合刚刚学的)

    1. **src/main/java**:这里存放所有Java源代码,包括控制器(Controller)、服务层(Service)、持久层(DAO)以及实体类(Entity)。 2. **src/main/resources**:配置文件和资源文件的存放地,如数据库连接配置...

    SpringMVC入门很简单之实现注解式权限验证

    在本文中,我们将深入探讨如何在SpringMVC框架中实现注解式的权限验证。SpringMVC是Java领域中广泛使用的Web开发框架,它为开发者提供了强大的功能,包括模型-视图-控制器(MVC)架构、依赖注入以及丰富的注解支持。...

    SpringMVC +Security+Hibernate

    在实际项目中,整合SpringMVC、Security和Hibernate时,首先需要在Spring的配置文件中引入相应的依赖和配置,如数据源、SessionFactory、Hibernate实体扫描路径等。接着,设置SpringMVC的拦截器和视图解析器。然后...

Global site tag (gtag.js) - Google Analytics