SpringMVC实体验证

       随着Rest服务的不断流行,Rest请求地址被捕获后,可以通过Rest地址直接向后台发送请求。因此后台数据验证就有了必要性。hibernate validator是对JSR 349 - Bean Validation 1.1验证API的一个实现。以下是基于SpringMVC和hibernate validator对后台数据验证的实现。

1.配置Spring MVC文件

 



    
    
    	
    	
    
    
	 
        
        
           
       			
       		 
        
   
   
    
        
        
   
    
    	
			
			
		    	
			
			
			
                
            			
  		
    
    
	
    
    
	
	
		
		
		
	

使用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 getMessagesByClassPath(String path) throws IOException{
		if(!StringUtils.hasLength(path)||!path.startsWith("classpath")){
			return new ArrayList();
		}
		
		List messages = new ArrayList() ;
		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文件,而不是用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文件见附件。

你可能感兴趣的:(JPA)