Java和C#下的参数验证
参数的输入和验证问题是开发时经常遇到的,一般的验证方法如下:
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#下的参数验证的更多相关文章
- JAVA中通过Hibernate-Validation进行参数验证
在开发JAVA服务器端代码时,我们会遇到对外部传来的参数合法性进行验证,而hibernate-validator提供了一些常用的参数校验注解,我们可以拿来使用.1.maven中引入hibernate- ...
- spring boot参数验证
必须要知道 简述 JSR303/JSR-349,hibernate validation,spring validation 之间的关系 JSR303 是一项标准,JSR-349 是其的升级版本,添加 ...
- C# 中参数验证方式的演变
一般在写方法的时候,第一步就是进行参数验证,这也体现了编码者的细心和缜密,但是在很多时候这个过程很枯燥和乏味,比如在拿到一个API设计文档的时候,通常会规定类型参数是否允许为空,如果是字符可能有长度限 ...
- C# 中参数验证方式
C# 中参数验证方式 一般在写方法的时候,第一步就是进行参数验证,这也体现了编码者的细心和缜密,但是在很多时候这个过程很枯燥和乏味,比如在拿到一个API设计文档的时候,通常会规定类型参数是否允许为空, ...
- 实现一个可配置的java web 参数验证器
当使用java web的servlet来做接口的时候,如果严格一点,经常会对请求参数做一些验证并返回错误码.我发现通常参数验证的代码就在servlet里边,如果参数不正确就返回相应的错误码.如果接口数 ...
- Java中的参数验证(非Spring版)
1. Java中的参数验证(非Spring版) 1.1. 前言 为什么我总遇到这种非正常问题,我们知道很多时候我们的参数校验都是放在controller层的传入参数进行校验,我们常用的校验方式就是引入 ...
- Java工具类——通过配置XML验证Map
Java工具类--通过配置XML验证Map 背景 在JavaWeb项目中,接收前端过来的参数时通常是使用我们的实体类进行接收的.但是呢,我们不能去决定已经搭建好的框架是怎么样的,在我接触的框架中有一种 ...
- 参数验证 @Validated 和 @Valid 的区别
来源:blog.csdn.net/qq_27680317/article/details/79970590 整编:Java技术栈(公众号ID:javastack) Spring Validation验 ...
- 自研后端HTTP请求参数验证器服务ParamertValidateService
好处:方便了后端对HTTP请求中参数进行核验,只需一次编写效验器,一行代码便可对所有参数的pojo进行参数核验!而且更改效验逻辑时只需要更改效验器类即可,实现了解耦合. 只需要程序员按照规范开发一个P ...
随机推荐
- 第一篇puppet
1,什么是puppet puppet是一种Linux.Unix.windows平台的集中配置管理系统,使用自有的puppet描述语言,可管理配置文件.用户.cron任务.软件包.系统服务等.puppe ...
- 推公式 HDU 2552
T 给你2个值 求另外一个 需要推一下 tan(a+b)=(tan(a)+tan(b))/(1-tan(a)*tan(b)); 等式左右取tan tan(atan(a))=a 1/s=tan(...) ...
- DevExpress.chartContro控件保存图片和打印图片
private void pictureBox1_Click(object sender, EventArgs e) { ////实例化打印对象 PrintDocument print = new P ...
- Solve
/// <summary> /// Solves this instance. /// </summary> /// <returns>IFeatureClass. ...
- 烂泥:nginx、php-fpm、mysql用户权限解析
原创作品,允许转载,转载时请务必以超链接形式标明文章 原始出处 .作者信息和本声明.否则将追究法律责任.http://ilanni.blog.51cto.com/526870/1561097 本文首发 ...
- apk 破解
Apk破解工具:AndroidCrackTool for Mac http://www.52pojie.cn/thread-452617-1-1.html 如何防止Unity3D代码被反编译 http ...
- [Unity] Shader(着色器)输入输出和语义
在Unity5.x后, 已经支持了基于物理的光照模型,也就是常说的次时代引擎所必须具备的功能. 如果在Properties使用2D,CG里要用sampler2D,代表使用的是2维纹理 如果在Prope ...
- Linux 笔记
权限: rwx rwx rwx 以4 2 1数字表示 rwx x 在目录当中是与『能否进入该目录』有关 w 可以让使用者删除.更新.新建文件或目录 通过 "su - vbird" ...
- LYDSY模拟赛day2 Divisors
/* 注意分解质因数,如果i是,那么n/i也是,这样就可以解决分解质因数的时间问题了 当 k ≥ 1 时,只有这些数的约数才会对答案产生贡献. 求出 m 个数的所有不超过 n 的约数,去重后统计即可. ...
- JavaScript URL编码转换函数 encodeURIComponent()
encodeURIComponent()定义和用法 encodeURIComponent() 函数可把字符串作为 URI 组件进行编码. 语法:encodeURIComponent(URIstring ...