Spring实战12——SpringMVC参数与表单校验

SpringMVC 允许多种方式将客户端的数据传送到控制器的处理器方法中,包括:

*.查询参数

*.表单参数

*.路径变量

表单校验:可以使用Spring 对Java 校验API(Java Validation API,又称JSR-303),需要添加两个依赖:javax.validation.constrains 和 hibernate-validator


1.对于校验,需要在entity中添加注解@NotNull,表示不能为空;@Min 指定最小值1,并指定错误提醒,后面附上其他校验注解

Student 类:

public class Student {
	private String id;
	@NotNull
	private String name;
	
	@Min(value = 1, message = "年龄太小。。。")
	private int age;
	
	public Student() {
		super();
		// TODO Auto-generated constructor stub
	}

	public Student(String id, String name, int age) {
		super();
		this.id = id;
		this.name = name;
		this.age = age;
	}
	
//getter and setter
}

2.service 层接口与实现

public interface StudentService {
	public List<Student> getStudents(int page, int count);
	public Student getOne(String stuId);
	public void save(Student student);
}
@Service
public class StudentServiceImpl implements StudentService {

	@Override
	public List<Student> getStudents(int page, int count) {
		List<Student> list = new ArrayList<Student>();
		for(int i = (page-1)*count+1; i <= count*page; i++) {
			list.add(new Student(i + "", i + "", (int)(new Random().nextInt(25))));
		}
		
		return list;
	}

	@Override
	public Student getOne(String stuId) {
		//假设查询了
		return new Student(stuId+"", "qqq", (int)(new Random().nextInt(20)));
	}

	@Override
	public void save(Student student) {
		System.out.println("保存数据");
		
	}

}

3.控制层

 参数接收的三种方法:
 *  1.@RequestParam 方法来接收请求参数:必须有value值,为了不为空可设置defaultValue
 *  2.通过路径参数接收,mapping 中使用{}来指定参数,@PathVariable,
 *  3.表单参数,注意属性名要相同,自动封装在一个对象中,如processRegistration 方法

扫描二维码关注公众号,回复: 6141155 查看本文章

 校验表单:
 *  1.添加依赖:javax.validation.constrains 和 hibernate-validator。
 *  2.通过@Valid 注解指定校验的参数,这里是Student 对象,前面在Student 类中的属性添加了@NotNull 和@Min 注解会校验,并且必须在此参数后面添加多一个参数Errors 或 BindingResult,可根据它的hasErrors 来判断是否有错误。

 
 重定向:return "redirect:/....."。

@Controller
@RequestMapping("student")
public class StudentController {
	
	@Autowired
	private StudentService studentService;
	
	/**
	 * 使用@RequestParam 方法来接收请求参数
	 * @param page
	 * @param count
	 * @return
	 */
	@RequestMapping(value = "/students", method = RequestMethod.GET)//默认是请求路径+jsp,即student/students
	public List<Student> getStudents(
			@RequestParam(value = "page", defaultValue = "1") int page,
			@RequestParam(value = "count", defaultValue = "5") int count) {
		System.out.println(page + "," + count);
		return studentService.getStudents(page, count);//默认返回的key名为 studentList,因为List<Student>
	}
	
	/**
	 * 使用占位符,通过路径参数接收,{stuId}与@PathVariable("stuId")绑定,把值传递给参数stuId
	 * @param stuId
	 * @param model
	 * @return
	 */
	@RequestMapping(value = "/{stuId}", method = RequestMethod.GET)
	public String student(
			@PathVariable("stuId") String stuId,//@PathVariable不指定value的话,默认与方法参数名相同
			Model model) {
		model.addAttribute(studentService.getOne(stuId));
		return "student/profile";
	}
	
	
	@RequestMapping(value = "/registerjsp", method = RequestMethod.GET)
	public String showRegister() {
		
		return "student/register";
	}
	
	
	/**
	 * Spring对 java 校验API(Java Validation API,又称 jsr-303),需要导包,包括javax.validation.constrains 和 hibernate-validator。
	 * @param student
	 * @param bindingResult
	 * @return
	 */
	@RequestMapping(value = "/register", method = RequestMethod.POST)
	public String processRegistration(@Valid Student student, BindingResult bindingResult) {//传过来的参数保存到对象中,使用默认构造器,getter和setter方法。
		System.out.println(student.getName());
		System.out.println(student.getAge());
		if(bindingResult.hasErrors()) {
			System.out.println(bindingResult.getFieldError().getDefaultMessage());
			return "student/register";
		}
		studentService.save(student);
		return "redirect:/student/" + student.getId();
	}
	
}

@Null    限制只能为null
@NotNull    限制必须不为null
@AssertFalse    限制必须为false
@AssertTrue    限制必须为true
@DecimalMax(value)    限制必须为一个不大于指定值的数字
@DecimalMin(value)    限制必须为一个不小于指定值的数字
@Digits(integer,fraction)    限制必须为一个小数,且整数部分的位数不能超过integer,小数部分的位数不能超过fraction
@Future    限制必须是一个将来的日期
@Max(value)    限制必须为一个不大于指定值的数字
@Min(value)    限制必须为一个不小于指定值的数字
@Past    限制必须是一个过去的日期
@Pattern(value)    限制必须符合指定的正则表达式
@Size(max,min)    限制字符长度必须在min到max之间
@Past    验证注解的元素值(日期类型)比当前时间早
@NotEmpty    验证注解的元素值不为null且不为空(字符串长度不为0、集合大小不为0)
@NotBlank    验证注解的元素值不为空(不为null、去除首位空格后长度为0),不同于@NotEmpty,@NotBlank只应用于字符串且在比较时会去除字符串的空格
@Email    验证注解的元素值是Email,也可以通过正则表达式和flag指定自定义的email格式
 

猜你喜欢

转载自blog.csdn.net/pigqhf/article/details/89155276
今日推荐