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 ...
随机推荐
- a版本冲刺第十天
队名:Aruba 队员: 黄辉昌 李陈辉 林炳锋 鄢继仁 张秀锋 章 鼎 408: 十天体会:完成冲刺很开心,大家一起为同一件事情努力的感觉还是很不错的,众人拾柴火焰高,而且冲刺的时候会有一种压 ...
- 编程结构:Promise和Future
非阻塞模型中Promise,Future 和 Callback一些比较常用的模型: Future表示一个可能还没有实际完成的异步任务结果:实际在编程中,应用future数据结构的时候,你得到并不是一个 ...
- TypeScript Generics(泛型)
软件工程的一个主要部分就是构建组件,构建的组件不仅需要具有明确的定义和统一的接口,同时也需要组件可复用.支持现有的数据类型和将来添加的数据类型的组件为大型软件系统的开发过程提供很好的灵活性. 在C#和 ...
- 有用的git建议
这篇文章的目的是给经常使用git管理项目提供一个有益的提醒.如果你是git新手,可以先阅读文后的引用部分,然后在回头阅读此篇文章.在介绍git命令之前,你可以先看看来自 on-my-zsh 提供的别名 ...
- kafka入门:简介、使用场景、设计原理、主要配置及集群搭建(转)
问题导读: 1.zookeeper在kafka的作用是什么? 2.kafka中几乎不允许对消息进行"随机读写"的原因是什么? 3.kafka集群consumer和producer状 ...
- SDL文字和图形
SDL本身没有显示文字功能,它需要用扩展库SDL_ttf来显示文字.ttf是True Type Font的缩写,ttf是Windows下的缺省字体,它有美观,放大缩小不变形的优点,因此广泛应用很多场合 ...
- [转]Oracle存在则更新,不存在则插入
原文:http://hi.baidu.com/mawf2008/item/eec8c7ad1c5be5ae29ce9da6 merge into a using bon (a.a=b.b)when m ...
- iOS中常用属性的关键字的使用说明
属性关键字的作用 现在我们iOS开发中,基本都是使用ARC(自动引用计数)技术,来编写我们的代码.因此在属性property中我们经常使用的关键字有strong,weak,assign,copy,no ...
- Java开发规范摘录
对于规范的 JAVA 派生类,尽量用 eclipse工具来生成文件格式,避免用手写的头文件/实现文件. 尽量避免一行的长度超过 200 个字符,因为很多终端和工具不能很好处理之.缩进8格 ,impor ...
- Codeforces #261 D
Codeforces #261 D D. Pashmak and Parmida's problem time limit per test 3 seconds memory limit per te ...