spring参数校验,form表单形式,以及http接口形式

背景

字段校验一般分为两种方式,第一种,前端校验,第二周,服务器端校验,不论前端校验如何,服务器端的校验是必不可少的,那么,在springMvc的框架中,怎么校验比较方便实用呢?在此,我会分别针对服务器端的form表单提交服务器校验和普通的http接口提交服务器服务器端的校验方式做一些介绍。

一、form表单提交服务器校验字段方式

1、hibernate-validator配合spring的form标签方式

需要的jar:
hibernate-validator-4.3.0.Final.jar
jboss-logging-3.2.1.Final.jar
validation-api-1.0.0.GA.jar

要校验的实体:


import javax.validation.constraints.Max;
import javax.validation.constraints.NotNull;

import org.hibernate.validator.constraints.Length;

public class User {

    @NotNull(message="名字不能为空")
    @Length(min = 6,max=12,message="用户名要在六位以上")
    private String userName;
    @Max(value=120,message="年龄最大不能查过120")
    private int age;
//  @Email(message="邮箱格式错误")
//  private String email;
    public String getUserName() {
        return userName;
    }
    public void setUserName(String userName) {
        this.userName = userName;
    }
    public int getAge() {
        return age;
    }
    public void setAge(int age) {
        this.age = age;
    }
//  public String getEmail() {
//      return email;
//  }
//  public void setEmail(String email) {
//      this.email = email;
//  }
}
这个需要校验的实体用注解对字段校验方式进行标注

处理页面请求的Controller:

@Controller
@RequestMapping(value = "/user")
public class UserController {
    @RequestMapping("/login")
    public String login(@Valid User user, BindingResult result, Model model,HttpServletRequest request) {
        //需要添加,否则spring的form标签会处理会失败,报错
        model.addAttribute(user);
        if (result.hasFieldErrors()) {
            return "user/login";
        }
        return "/";
    }
}
控制器中,要用@Valid标记要校验的实体,并且紧跟着的参数是BindingResult result,这样在处理业务之前,会先校验user这个实体里面的字段是否合法,如果不合法,会将在User这个bean中的提示消息返回给jsp页面中(但是这个需要spring form标签的支持,一旦用了spring from 的标签作为表单支持的时候,对应的Controller 的方法中一定要给model或者modelMap中返回设置一个被校验对象的值,否则会报错,具体下面会有介绍)

jsp页面:

<%@ page language="java" import="java.util.*" pageEncoding="utf-8"%>
<%@ taglib uri = "http://www.springframework.org/tags/form" prefix="sf" %>
<%
String path = request.getContextPath();
String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
%>

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
  <head>

    <title>My JSP 'login.jsp' starting page</title>

    <meta http-equiv="pragma" content="no-cache">
    <meta http-equiv="cache-control" content="no-cache">
    <meta http-equiv="expires" content="0">    
    <meta http-equiv="keywords" content="keyword1,keyword2,keyword3">
    <meta http-equiv="description" content="This is my page">

    <style type="text/css">
        .error{
            color:red;
        }
    </style>
  </head>

  <body>
   登录页面<br>
   <sf:form method="POST" modelAttribute="user"> 
    userName : <sf:input path="userName"/>
                <sf:errors path="userName" cssClass="error"/><br>
    age : <sf:input path="age"/>    
                <sf:errors path="age" cssClass="error"/><br>
                <input type="submit" value="提交"> 
   </sf:form>
  </body>
</html>
jsp页面中必须要引入
<%@ taglib uri = "http://www.springframework.org/tags/form" prefix="sf" %>
这个是 spring form 的标签库
然后在页面中使用 spring form 标签库支持的标签书写form表单,在每一个input字段的后面,书写<sf:errors path="age" cssClass="error"/><br>,这个errors的path字段要与对应的input标签的path值对应,才能在渲染页面的时候正常渲染注入。

效果图:
这里写图片描述

二、http接口请求参数校验用aop实现,以后补充代码

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值