一、ParamCheckValidate 参数验证
此例是通过SpringMVC从前台获取Map格式的json后,调用Message()方法,来判断传入的参数是否为空,以及基本格式是否正确,如:手机号码、密码等,但前提是你必须在BaseConstants 中配置你要传入的参数
package com.yhb.validate;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
import com.google.common.collect.Maps;
import com.yhb.base.BaseConstants;
import com.yhb.enums.ResultEnum;
import com.yhb.util.CheckPhoneOrPassWord;
import com.yhb.util.StringUtil;
import com.yhb.util.json.JsonResult;
/**
* Copyright: Copyright (c) 2017 LanRu-Caifu
*
* @ClassName: ParamCheckValidate.java
* @Description: 参数验证
* @date: 2017年5月5日 上午11:00:10
*/
public class ParamCheckValidate {
private static String keyName;
private static String value;
/**
*
* @Description:校验入参
*
* @param:param
* @return:Json OR Boolean
* @date: 2017年5月5日 上午11:31:53
*/
public static Map<String, String> Message(Map<String, String> param) {
Map<String, String> returnMap = Maps.newHashMap();
List<String> paramList = new ArrayList<String>();
// 遍历Map集合获取KeyName
for (String keyNames : param.keySet()) {
if (!keyNames.equals("JSESSIONID") && !keyNames.equals("inviteCode")) {
keyName = keyNames;
paramList.add(keyName);
}
}
// 遍历List取出KeyName对象
for (String string : paramList) {
// KeyName对象存在于该集合里,则进入判断否则返回状态
if (BaseConstants.VALIDATEKEY_MAP.containsKey(string)) {
// 取出相对应的值
value = param.get(string);
if (StringUtil.isNull(value) || StringUtil.isBlank(value)) {
if (string.equals("account")) {
if (CheckPhoneOrPassWord.isMobileNum(param.get(string)) == false) {
returnMap.put(String.valueOf(ResultEnum.LOGIN_FORMISFLAG.getCode()),
ResultEnum.LOGIN_FORMISFLAG.getCodeDesc());
return returnMap;
}
}
if (string.equals("password")) {
if (CheckPhoneOrPassWord.isPassword(param.get(string)) == false) {
returnMap.put(String.valueOf(ResultEnum.LOGIN_FORMISFLAG.getCode()),
ResultEnum.LOGIN_FORMISFLAG.getCodeDesc());
return returnMap;
}
}
// 如果当前value为空,那么当前KeyName所带参数就一定为空,找到系统字典中所对应的Code匹配
if (BaseConstants.VALIDATEVALUEISNULLBYKEY.containsKey(string)) {
Integer enumValue = BaseConstants.VALIDATEVALUEISNULLBYKEY.get(string);
// 通过values()方法,将枚举里所有类型列出来
for (ResultEnum resultCode : ResultEnum.values()) {
if (resultCode.getCode() == enumValue) {
returnMap.put(String.valueOf(resultCode.getCode()), resultCode.getCodeDesc());
}
}
}
}
} else {
returnMap.put(String.valueOf(ResultEnum.DICTIONARY_ERROR.getCode()),
ResultEnum.DICTIONARY_ERROR.getCodeDesc());
}
}
return returnMap;
}
}
二、BaseConstants 常量类
VALIDATEKEY_MAP集合用于验证前台参数是否存在于系统字典中 保证前后一致
VALIDATEVALUEISNULLBYKEY 集合是用来对应系统字典,当发生错误时,将系统字典中配置ResultEnum 的信息输出
package com.yhb.base;
import java.util.HashMap;
import java.util.Map;
/**
*
* Copyright: Copyright (c) 2017 LanRu-Caifu
*
* @ClassName: BaseConstants.java
* @Description: 全局常量
* @date: 2017年4月27日 下午1:52:27
*/
public class BaseConstants {
/**
* 常量
*
* @author KRx
*/
public interface Token {
public final static String TOKEN_NAME = "token";
}
/**
* PC来源
*/
public static final String PC = "PC";
/**
* H5来源
*/
public static final String H5 = "H5";
/**
* APP来源
*/
public static final String APP = "APP";
/**
* WEIXIN
*/
public static final String WEIXIN = "微信";
/**
* OTHER
*/
public static final String OTHER = "其他";
/**
* UTF-8编码
*/
public static final String UTF8 = "UTF-8";
/**
* 提示信息
*/
public static final String MESSAGE = "message";
/**
* cookie中的JSESSIONID名称
*/
public static final String JSESSION_COOKIE = "JSESSIONID";
/**
* url中的jsessionid名称
*/
public static final String JSESSION_URL = "jsessionid";
/**
* 附件路径
*/
public static final String FILEPATH = "files";
/**
* HTTP POST请求
*/
public static final String POST = "POST";
/**
* HTTP GET请求
*/
public static final String GET = "GET";
public static final String DES_PUBLIC_ENCRYPT_KEY = "6Ta4OaHZdpA="; // DES加密key
// IV
public static final String DES_PRIVATE_ENCRYPT_KEY = "o0al4OaEWBzA1";
/** app加密key值 **/
public static final String DES_PUBLIC_KEY_IOS_ANDROID = "0123456789lbsoft";
// 验证前台参数是否存在于系统字典中 保证前后一致
public static Map<String, String> VALIDATEKEY_MAP = new HashMap<String, String>();
// 对应系统字典
public static Map<String, Integer> VALIDATEVALUEISNULLBYKEY = new HashMap<String, Integer>();
static {
VALIDATEKEY_MAP.put("account", "account"); //账号
VALIDATEKEY_MAP.put("password", "password"); //密码
VALIDATEKEY_MAP.put("phoneCode", "phoneCode"); //手机验证码
VALIDATEKEY_MAP.put("picCode", "picCode"); //图文验证码
VALIDATEKEY_MAP.put("state", "state"); //发送短信的类型
VALIDATEKEY_MAP.put("smsContext", "smsContext"); //发送的短信信息
VALIDATEVALUEISNULLBYKEY.put("acccount",-1); //手机号码
VALIDATEVALUEISNULLBYKEY.put("password",-5); //密码
VALIDATEVALUEISNULLBYKEY.put("phoneCode", -7); //手机验证码
VALIDATEVALUEISNULLBYKEY.put("picCode", -8); //图文验证码
VALIDATEVALUEISNULLBYKEY.put("state", -100); //发送短信的类型
VALIDATEVALUEISNULLBYKEY.put("smsContext", -101); //发送的短信信息
}
}
3、ResultEnum
系统字典,此处只是一些简单的测试配置
/**
*
*/
package com.yhb.enums;
/**
* Copyright: Copyright (c) 2017 LanRu-Caifu
*
* @ClassName: ResultEnum.java
* @Description: 系统错误常量字典
* @date: 2017年4月27日 下午3:20:07
*/
public enum ResultEnum {
USERNAME_ISNULL(-1,"密码为空"),
PASSWORD_ISERROR(-2,"密码错误"),
USER_ISNULL(-3,"没有该账号"),
LOGIN_FORMISFLAG(-4,"登录账号或密码格式错误"),
PASSWORD_ISNULL(-5,"密码为空"),
CAPTCHA_ISERROR(-6,"验证码错误"),
PHONECODE_ISNULL(-7,"手机验证码为空"),
PICCODE_ISNULL(-8,"图文验证码为空"),
PHONECODE_ISERROR(-9,"手机验证码错误"),
PICCODE_ISERROR(-10,"图文验证码错误"),
// 手机号码已存在
PHONECODE_ISEXIT(-11,"手机号码已存在"),
TOKEN_ISNULL(-12,"token为空"),
// 黑名单用户
BLACK_USER(-13,"黑名单用户"),
IMAGE_ISBIG(-14,"上传图片过大"),
ERROR(-500, "系统错误"),
DICTIONARY_ERROR(-501,"字典错误,传入的参数中有不合法参数"),
SUCCESS(200,"成功"),
/*
* 大汉三通的信息字典——短信发送:wangxf
*/
// 大汉三通-发送短信:用户被禁发或禁用(格式,范围等不符合要求)
PARAM_ERROR(19,"用户被禁发或禁用(格式,范围等不符合要求)"),
// 大汉三通-发送短信:成功
SMS_SEND_SUCCESS(0,"短信发送成功"),
// 大汉三通-发送短信:系统正忙
SYSTEM_BUSY(98,"系统正忙"),
// 大汉三通-发送短信:手机号码无效
PHONE_INVALID(1,"手机号码无效"),
// 大汉三通-发送短信:手机号码为空
PHONE_ISNULL(14,"手机号码为空"),
// 大汉三通-短信发送:ip鉴权失败
IP_AUTHENT_FAILURE(20,"ip鉴权失败"),
// 短信发送的状态错误
SMS_STATE_ERROR(-100,"发送短信类型值错误!"),
// 短信信息为空
SMS_CONTEXT_ISNULL(-101,"短信信息为空!")
;
/**
* code值
*/
private final int code;
/**
* code对应的描述
*/
private final String codeDesc;
ResultEnum(int code, String codeDesc) {
this.code = code;
this.codeDesc = codeDesc;
}
/**
* 获取code值
*
* @return
*/
public int getCode() {
return code;
}
/**
* 获取code值对应的描述
*
* @return
*/
public String getCodeDesc() {
return codeDesc;
}
/**
*
* @Function: ExceptionEnum.java
* @Description: 通过枚举code值获取相应的枚举类型对象
*
* @param: int code
* @return: ResultEnum
* @throws:
*
* @version: v1.0.0
* @date: 2017年5月4日 下午2:15:27
*
* Modification History:
* Date Author Version Description
*---------------------------------------------------------*
* 2017年5月2日 wangxf v1.0.0 修改原因
*/
public static ResultEnum getResultEnumByCode(int code){
// 通过values()方法,将枚举里所有类型列出来
for( ResultEnum resultCode : ResultEnum.values() ){
if( resultCode.getCode() == code){
return resultCode;
}
}
return null;
}
}
*** 说明:这只是写的一个小demo,主在传达一种思想,如果有更好的想法,希望多多指教***