Springmvc数据校验返回Json格式

原文地址 http://tzwzero-163-com.iteye.com/blog/1696490


     SpringMVC从3.1开始引入了hibernate的校验,感觉也是一个很好用的东西,不需要配置文件,通过annotation就可以,这样做的好处是:你可以控制错误的输出方式,相比webx;

例如:实体类

Java代码   收藏代码
  1. package com.mybank.domain;  
  2.   
  3. import javax.validation.constraints.Size;  
  4.   
  5. import org.hibernate.validator.constraints.Email;  
  6. import org.hibernate.validator.constraints.NotEmpty;  
  7.   
  8. public class UserInfo {  
  9.   
  10.     private long id;  
  11.     @Size(max=25,message="用户昵称太长了")  
  12.     private String userNick;  
  13.     @NotEmpty(message="邮箱不能为空")  
  14.     @Email(message="请填写正确格式")  
  15.     private String userEmail;  
  16.       
  17.     @NotEmpty(message="密码不能为空哦")  
  18.     @Size(min = 1, max = 25,message="密码请控制在1~25个字符之间")  
  19.     private String userPassword;  
  20.       
  21.     private int status;  
  22.       
  23.   
  24.     public int getStatus() {  
  25.         return status;  
  26.     }  
  27.   
  28.     public void setStatus(int status) {  
  29.         this.status = status;  
  30.     }  
  31.   
  32.     public String getUserPassword() {  
  33.         return userPassword;  
  34.     }  
  35.   
  36.     public void setUserPassword(String userPassword) {  
  37.         this.userPassword = userPassword;  
  38.     }  
  39.   
  40.     public long getId() {  
  41.         return id;  
  42.     }  
  43.   
  44.     public void setId(long id) {  
  45.         this.id = id;  
  46.     }  
  47.   
  48.     public String getUserNick() {  
  49.         return userNick;  
  50.     }  
  51.   
  52.     public void setUserNick(String userNick) {  
  53.         this.userNick = userNick;  
  54.     }  
  55.   
  56.     public String getUserEmail() {  
  57.         return userEmail;  
  58.     }  
  59.   
  60.     public void setUserEmail(String userEmail) {  
  61.         this.userEmail = userEmail;  
  62.     }  
  63.   
  64. }  

 处理的类:

Java代码   收藏代码
  1. @RequestMapping("/register")  
  2. public @ResponseBody  
  3. Map<String, Object> register(@Valid UserInfo userInfo, BindingResult result) {  
  4.     Map<String, Object> model = new HashMap<String, Object>();  
  5.     String code = "0";  
  6.     String message = "";  
  7.     if (result.hasErrors()) {  
  8.         for (FieldError fieldError : result.getFieldErrors()) {  
  9.             model.put(fieldError.getField(), fieldError.getDefaultMessage());  
  10.         }  
  11.         return model;  
  12.     }  
  13.     String sql = "INSERT INTO user_info (user_email, user_nick,user_password,gmt_create,gmt_modified,status) VALUES (?,?,?,?,?,?)";  
  14.     String querySql = "select * from user_info where user_email=?";  
  15.     UserInfo ownerInfo = null;  
  16.     try {  
  17.         ownerInfo = jdbcTemplate.queryForObject(querySql,  
  18.                 new Object[] { userInfo.getUserEmail() },  
  19.                 new BeanPropertyRowMapper<UserInfo>(UserInfo.class));  
  20.     } catch (EmptyResultDataAccessException e) {  
  21.         message = "您已经注册过了";  
  22.     }  
  23.     if (ownerInfo == null  
  24.             || ownerInfo.getStatus() != Constants.NORMAL_STATUS) {  
  25.         int i = jdbcTemplate.update(sql, userInfo.getUserEmail(),  
  26.                 userInfo.getUserNick(), userInfo.getUserPassword(),  
  27.                 new Date(), new Date(), Constants.NORMAL_STATUS);  
  28.         if (i > 0) {  
  29.             code = "200";  
  30.             message = "注册成功";  
  31.         } else {  
  32.             message = "注册失败";  
  33.         }  
  34.     } else {  
  35.         message = "您已经注册过了";  
  36.     }  
  37.   
  38.     model.put("code", code);  
  39.     model.put("message", message);  
  40.     return model;  
  41.   
  42. }  

这样,校验信息就可以顺利的转成json返回给前端,而大部分使用的校验框架基本都是在请求进入action前就处理,这样的好处是及时返回,坏处是返回格式不易控制。校验需要使用的jar包

Java代码   收藏代码
  1. hibernate-validator-4.1.0.Final.jar  
  2. javax.validation-1.0.0.GA.jar  
  3. slf4j-api-1.6.1.jar  
  4. commons-logging-1.1.1.jar  

 如果你需要返回json类型还需要如下jar包

Java代码   收藏代码
  1. jackson-core-asl-1.9.10.jar  
  2. jackson-mapper-asl-1.9.10.jar  
 

 由于只是自己玩,所以懒得加入一堆jar,所以dao还是使用了Spring的JDBCTemplate,再者我是个很懒得人,所以不太喜欢自己从ResultSet里边一一对应的取值复制,所以百度终得其解,不过也有些限制做法如下:

Java代码   收藏代码
  1. userInfo = jdbcTemplate.queryForObject(  
  2.                     sql,  
  3.                     new Object[] { userInfo.getUserEmail(),  
  4.                             userInfo.getUserPassword() },  
  5.                     new BeanPropertyRowMapper<UserInfo>(UserInfo.class));  
 

在查询的时候传入的RowMapper使用:BeanPropertyRowMapper,由Spring完成这一步,不过前提是属性使用驼峰(完全按照数据库字段定义属性也可以,不过估计没人愿意这么干)具体的如果出错了,参加源码应该也可以很好的理解的。

哇咔咔,这个BeanPropertyRowMapper实在是省事啊。

对了其实我的SpringMVC的配置文件也相对比较简单如下:

Xml代码   收藏代码
  1. <?xml version="1.0" encoding="UTF-8"?>  
  2. <beans xmlns="http://www.springframework.org/schema/beans"  
  3.     xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:tx="http://www.springframework.org/schema/tx"  
  4.     xmlns:context="http://www.springframework.org/schema/context"  
  5.     xmlns:mvc="http://www.springframework.org/schema/mvc"  
  6.     xsi:schemaLocation="http://www.springframework.org/schema/beans     
  7.     http://www.springframework.org/schema/beans/spring-beans-3.0.xsd     
  8.     http://www.springframework.org/schema/tx     
  9.     http://www.springframework.org/schema/tx/spring-tx-3.0.xsd    
  10.     http://www.springframework.org/schema/context    
  11.     http://www.springframework.org/schema/context/spring-context-3.0.xsd    
  12.     http://www.springframework.org/schema/mvc    
  13.     http://www.springframework.org/schema/mvc/spring-mvc-3.0.xsd">  
  14.   
  15.     <!-- 启用spring mvc 注解 -->  
  16.     <context:annotation-config />  
  17.     <mvc:annotation-driven />  
  18.     <mvc:default-servlet-handler />  
  19.   
  20.     <!-- 设置使用注解的类所在的jar包 -->  
  21.     <context:component-scan base-package="com.mybank.action"></context:component-scan>  
  22.   
  23.     <!-- 完成请求和注解POJO的映射 <bean class="org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter"   
  24.         /> -->  
  25.     <!-- 对转向页面的路径解析。prefix:前缀, suffix:后缀 -->  
  26.     <bean  
  27.         class="org.springframework.web.servlet.view.InternalResourceViewResolver">  
  28.         <property name="prefix" value="" />  
  29.         <property name="suffix" value=".jsp" />  
  30.     </bean>  
  31.   
  32.   
  33. </beans>  
 

其中context:component-scan这个可以配置空值

Xml代码   收藏代码
  1. <context:annotation-config />  
  2. <mvc:annotation-driven />  
  3. <mvc:default-servlet-handler />  

这三个可以让你省去一大堆配置

Xml代码   收藏代码
  1. <bean  
  2.         class="org.springframework.web.servlet.view.InternalResourceViewResolver">  
  3.         <property name="prefix" value="" />  
  4.         <property name="suffix" value=".jsp" />  
  5.     </bean>  

这个貌似必须配置,否则你的应用就找不到处理完成后的响应视图了

发布了43 篇原创文章 · 获赞 2 · 访问量 4万+

猜你喜欢

转载自blog.csdn.net/yizufengdou/article/details/8754174