前端JSON请求统一校验

一、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,主在传达一种思想,如果有更好的想法,希望多多指教***

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 205,386评论 6 479
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 87,939评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 151,851评论 0 341
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,953评论 1 278
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,971评论 5 369
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,784评论 1 283
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,126评论 3 399
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,765评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 43,148评论 1 300
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,744评论 2 323
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,858评论 1 333
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,479评论 4 322
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,080评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,053评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,278评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,245评论 2 352
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,590评论 2 343

推荐阅读更多精彩内容

  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 134,598评论 18 139
  • 点击查看原文 Web SDK 开发手册 SDK 概述 网易云信 SDK 为 Web 应用提供一个完善的 IM 系统...
    layjoy阅读 13,664评论 0 15
  • Android 自定义View的各种姿势1 Activity的显示之ViewRootImpl详解 Activity...
    passiontim阅读 171,483评论 25 707
  • 今年的5月14是母亲节,在大街上,在公园里,你有没有给这些特别的人一个微不足道的拥抱? 许多纯真可爱的孩子献上自己...
    little西西柚阅读 294评论 0 2
  • 兜兜转转,总有些相遇,让人措手不及。 我从来没想到,再次见到白小羊会是在这个嘈杂的大商场。 人海茫茫,人潮拥挤,可...
    有鱼姑娘阅读 283评论 0 4