SpringMVC

阅读更多

本周简单学习使用了一下SpringMVC,各种爽快在心头

1.首先说一下对我观点颠覆的一个地方,以前不太看好将配置转注解,一方面是自己使用惯了配置,程序结构清晰明了,反观注解,如果项目较小,你会觉得开发起来一气呵成,极端爽快,但是可以预见的是如果项目边的过于庞大,那么查找定位就显得比较费劲了,可能很多时候包名,类名就成了类管理的一种默认(这难道就是约定由于配置(约定优于配置)?),所以这就需要团队之间快速达成共识了,说说SpringMVC的最爽的注解@Controller及@RequestMapping("/login"),这个可以让你省去配置请求跟类之间的对应关系,而且可以做到真正的“一致性”,不过目前还不是很清楚如果某人也顶一个了相同的login该怎么区别?这个只有在应用打包的时候有spring做后知后觉的检测了。

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

例如:实体类

 

package com.mybank.domain;

import javax.validation.constraints.Size;

import org.hibernate.validator.constraints.Email;
import org.hibernate.validator.constraints.NotEmpty;

public class UserInfo {

	private long id;
	@Size(max=25,message="用户昵称太长了")
	private String userNick;
	@NotEmpty(message="邮箱不能为空")
	@Email(message="请填写正确格式")
	private String userEmail;
	
	@NotEmpty(message="密码不能为空哦")
	@Size(min = 1, max = 25,message="密码请控制在1~25个字符之间")
	private String userPassword;
	
	private int status;
	

	public int getStatus() {
		return status;
	}

	public void setStatus(int status) {
		this.status = status;
	}

	public String getUserPassword() {
		return userPassword;
	}

	public void setUserPassword(String userPassword) {
		this.userPassword = userPassword;
	}

	public long getId() {
		return id;
	}

	public void setId(long id) {
		this.id = id;
	}

	public String getUserNick() {
		return userNick;
	}

	public void setUserNick(String userNick) {
		this.userNick = userNick;
	}

	public String getUserEmail() {
		return userEmail;
	}

	public void setUserEmail(String userEmail) {
		this.userEmail = userEmail;
	}

}

 处理的类:

 

 

	@RequestMapping("/register")
	public @ResponseBody
	Map register(@Valid UserInfo userInfo, BindingResult result) {
		Map model = new HashMap();
		String code = "0";
		String message = "";
		if (result.hasErrors()) {
			for (FieldError fieldError : result.getFieldErrors()) {
				model.put(fieldError.getField(), fieldError.getDefaultMessage());
			}
			return model;
		}
		String sql = "INSERT INTO user_info (user_email, user_nick,user_password,gmt_create,gmt_modified,status) VALUES (?,?,?,?,?,?)";
		String querySql = "select * from user_info where user_email=?";
		UserInfo ownerInfo = null;
		try {
			ownerInfo = jdbcTemplate.queryForObject(querySql,
					new Object[] { userInfo.getUserEmail() },
					new BeanPropertyRowMapper(UserInfo.class));
		} catch (EmptyResultDataAccessException e) {
			message = "您已经注册过了";
		}
		if (ownerInfo == null
				|| ownerInfo.getStatus() != Constants.NORMAL_STATUS) {
			int i = jdbcTemplate.update(sql, userInfo.getUserEmail(),
					userInfo.getUserNick(), userInfo.getUserPassword(),
					new Date(), new Date(), Constants.NORMAL_STATUS);
			if (i > 0) {
				code = "200";
				message = "注册成功";
			} else {
				message = "注册失败";
			}
		} else {
			message = "您已经注册过了";
		}

		model.put("code", code);
		model.put("message", message);
		return model;

	}

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

 

 

hibernate-validator-4.1.0.Final.jar
javax.validation-1.0.0.GA.jar
slf4j-api-1.6.1.jar
commons-logging-1.1.1.jar

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

 

jackson-core-asl-1.9.10.jar
jackson-mapper-asl-1.9.10.jar
 

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

 

userInfo = jdbcTemplate.queryForObject(
					sql,
					new Object[] { userInfo.getUserEmail(),
							userInfo.getUserPassword() },
					new BeanPropertyRowMapper(UserInfo.class));
 

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

 

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

 

 

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

 



	
	
	
	

	
	

	
	
	
		
		
	


 

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

 



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

 

 


		
		
	

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

 

期间遇到一些问题最终定位到是因为java文件保存格式为

一番百度算是解决了,参见我的这篇blog

http://tzwzero-163-com.iteye.com/blog/1696605

 

 

 

 

 

  • slf4j-api-1.6.1.jar (24.9 KB)
  • 下载次数: 8
  • hibernate-validator-4.1.0.Final.jar (281 KB)
  • 下载次数: 18
  • commons-logging-1.1.1.jar (59.3 KB)
  • 下载次数: 8
  • javax.validation-1.0.0.GA.jar (47.8 KB)
  • 下载次数: 16
  • jackson-core-asl-1.9.10.jar (226.7 KB)
  • 下载次数: 18
  • jackson-mapper-asl-1.9.10.jar (762.1 KB)
  • 下载次数: 19

你可能感兴趣的:(SpringMVC,Validator)