参数的输入和验证问题是开发时经常遇到的,一般的验证方法如下:

public bool Register(string name, int age)
{
if (string.IsNullOrEmpty(name))
{
throw new ArgumentException("name should not be empty", "name");
}
if (age < || age > )
{
throw new ArgumentException("the age must between 10 and 70","age");
}
//...
}

这样做当需求变动的时候,要改动的代码相应的也比较多,这样比较麻烦,最近接触到了Java和C#下2种方便的参数验证方法,简单的介绍下。

Java参数验证:

采用google的guava下的一个辅助类:

import com.google.common.base.Preconditions;

示例代码:

    public static void checkPersonInfo(int age, String name){
Preconditions.checkNotNull(name, "name为null");
Preconditions.checkArgument(name.length() > 0, "name的长度要大于0");
Preconditions.checkArgument(age > 0, "age必须大于0");
System.out.println("a person age: " + age + ", name: " + name);
} public static void getPostCode(String code){
Preconditions.checkArgument(checkPostCode(code),"邮政编码不符合要求");
System.out.println(code);
} public static void main(String[] args) {
try {
checkPersonInfo(10,"fdsfsd");
checkPersonInfo(10,null);
checkPersonInfo(-10,"fdsfsd");
getPostCode("012234"); } catch (Exception e) {
e.printStackTrace();
}
}

当参数不满足要求的时候,抛出异常信息,异常中携带的信息为后面自定义的字符串,这样写就方便多了。

C#参数验证:

采用FluentValidation这个类库,参考地址在下面。

使用方法:

一个简单的Person类:

    public class Person
{
public string Name { set; get; } public int Age { set; get; } public Person(string name, int age)
{
Name = name;
Age = age;
}
}

Person的验证类:

    public class PersonValidator : AbstractValidator<Person>
{
public PersonValidator()
{
RuleFor(x => x.Name).NotEmpty().WithMessage("姓名不能为空");
RuleFor(x => x.Name).Length(,).WithMessage("姓名字符不能超过50");
RuleFor(x => x.Age).GreaterThan().WithMessage("年龄必须要大于0");
} private bool ValidName(string name)
{
// custom name validating logic goes here
return true;
}
}

使用:

    class Program
{
static void Main(string[] args)
{
Person customer = new Person(null,-);
PersonValidator validator = new PersonValidator();
ValidationResult results = validator.Validate(customer); bool validationSucceeded = results.IsValid;
IList<ValidationFailure> failures = results.Errors;
foreach (var failure in failures)
{
Console.WriteLine(failure.ErrorMessage);
} Console.ReadKey();
}
}

FluentValidation的使用文档:http://fluentvalidation.codeplex.com/documentation

参考资料:

http://fluentvalidation.codeplex.com/

https://github.com/JeremySkinner/FluentValidation

Java和C#下的参数验证的更多相关文章

  1. JAVA中通过Hibernate-Validation进行参数验证

    在开发JAVA服务器端代码时,我们会遇到对外部传来的参数合法性进行验证,而hibernate-validator提供了一些常用的参数校验注解,我们可以拿来使用.1.maven中引入hibernate- ...

  2. spring boot参数验证

    必须要知道 简述 JSR303/JSR-349,hibernate validation,spring validation 之间的关系 JSR303 是一项标准,JSR-349 是其的升级版本,添加 ...

  3. C# 中参数验证方式的演变

    一般在写方法的时候,第一步就是进行参数验证,这也体现了编码者的细心和缜密,但是在很多时候这个过程很枯燥和乏味,比如在拿到一个API设计文档的时候,通常会规定类型参数是否允许为空,如果是字符可能有长度限 ...

  4. C# 中参数验证方式

    C# 中参数验证方式 一般在写方法的时候,第一步就是进行参数验证,这也体现了编码者的细心和缜密,但是在很多时候这个过程很枯燥和乏味,比如在拿到一个API设计文档的时候,通常会规定类型参数是否允许为空, ...

  5. 实现一个可配置的java web 参数验证器

    当使用java web的servlet来做接口的时候,如果严格一点,经常会对请求参数做一些验证并返回错误码.我发现通常参数验证的代码就在servlet里边,如果参数不正确就返回相应的错误码.如果接口数 ...

  6. Java中的参数验证(非Spring版)

    1. Java中的参数验证(非Spring版) 1.1. 前言 为什么我总遇到这种非正常问题,我们知道很多时候我们的参数校验都是放在controller层的传入参数进行校验,我们常用的校验方式就是引入 ...

  7. Java工具类——通过配置XML验证Map

    Java工具类--通过配置XML验证Map 背景 在JavaWeb项目中,接收前端过来的参数时通常是使用我们的实体类进行接收的.但是呢,我们不能去决定已经搭建好的框架是怎么样的,在我接触的框架中有一种 ...

  8. 参数验证 @Validated 和 @Valid 的区别

    来源:blog.csdn.net/qq_27680317/article/details/79970590 整编:Java技术栈(公众号ID:javastack) Spring Validation验 ...

  9. 自研后端HTTP请求参数验证器服务ParamertValidateService

    好处:方便了后端对HTTP请求中参数进行核验,只需一次编写效验器,一行代码便可对所有参数的pojo进行参数核验!而且更改效验逻辑时只需要更改效验器类即可,实现了解耦合. 只需要程序员按照规范开发一个P ...

随机推荐

  1. Unable to load R3 module D:\Program Files\Oracle\VirtualBox/VBoxDD.DLL (VBoxDD): GetLastError=1790 (VERR_UNRESOLVED_ERROR).

    Unable to load R3 module D:\Program Files\Oracle\VirtualBox/VBoxDD.DLL (VBoxDD): GetLastError=1790 ( ...

  2. JavaMail简单版实验测试

    前言: 最近由于实现web商城的自动发送邮件功能的需求,故涉猎的邮箱协议的内部原理.现将简单版的Java Mail实例做个代码展示,并附上其中可能出现的bug贴出,方便感兴趣的读者进行测试! 1.载入 ...

  3. Django学习笔记(现学现写,实时更新)

    说明:我是先上手做一些简单的例子,然后在尝试的过程中理解Django的原理,笔记也是按这个思路来的. 一.Django结构与基本文件介绍 1. django-admin.py 工程管理工具,主要用于创 ...

  4. 【Beta】第五次任务发布

    PM #100 日常管理&dev版宣传&设计报告管理后台. 后端 #101 完成收藏功能 完成管理员权限表的生成和接入(按位压缩权限表) 验收条件:收藏功能能够正常使用.能够区分常规用 ...

  5. BZOJ3172: [Tjoi2013]单词

    传送门 做了这么多题怎么还是无法很好的理解AC自动机呢..果然是个制杖 首先题意表述不是很清晰,这些所有的单词组成了那个文章,所以果断建个AC自动机,建的时候给每个点附加一个权值,建树是经过一次权值即 ...

  6. 我的SqlHelper类!

    using System;using System.Collections.Generic;using System.Linq;using System.Text;using System.Threa ...

  7. echarts统计图使用

    网址:http://echarts.baidu.com  提示:不需要导入Jquery.js 使用: 1.导入js,echarts.js 2.创建容器 <!-- 为ECharts准备一个具备大小 ...

  8. MySQL提示:The server quit without updating PID file问题的解决办法(转载)

    MySQL提示:The server quit without updating PID file问题的解决办法 今天网站web页面提交内容到数据库,发现出错了,一直提交不了,数找了下原因,发现数据写 ...

  9. ML 基础知识

    A computer program is said to learn from experience E with respect to some task T and some performan ...

  10. 微信公众平台推出"微信保护"提升微信账号安全 附微信保护开启教程

    前两天小美女的微信公众平台要群发消息时提示需要绑定手机才能操作,当时还以为是动态ip的问题,今天微信公众平台安全中心就说升级了,原来那时已经在公测了.微信公众平台推出"微信保护", ...