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 ...
随机推荐
- Python操作Mysql之基本操作
pymysql python操作mysql依赖pymysql这个模块 下载安装 pip3 install pymysql 操作mysql python操作mysql的时候,是通过”游标”来进行操作的. ...
- iOS播放器 - AVPlayer
之前有说到在播放器中一点点小技巧,现在正式记录一下AVPlayer. 这里主要是说明用AVPlayer做音乐播放器的功能实现,所以不介绍AVPlayer中那个图层类. 首先我们要声明一下播放器,这里有 ...
- Win7如何删除需要管理员权限才能删除的文件夹
在Windows 7系统运行中.往往会遇到想要删除某个文件夹时,系统提示:文件夹访问被拒绝 你需要权限来执行此操作,如何才能删除此类文件夹呢? ------------------ --------- ...
- Yii2.0 用户登录详解(上)
一.准备 在开始编写代码之前,我们需要思考一下:用户登陆模块,实现的是什么功能?很明显,是登陆功能,那么,登陆需要用户名和密码,我们在数据库的一张表中就应该准备好用户名和密码的字段,再思考一下,如果要 ...
- 11月10日下午 ajax做显示信息以后用ajax、Bootstrp做弹窗显示信息详情
1.用ajax做弹窗显示信息详情 nation.php <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN&qu ...
- Google Map API V3开发(3)
Google Map API V3开发(1) Google Map API V3开发(2) Google Map API V3开发(3) Google Map API V3开发(4) Google M ...
- Java数据结构——图
点 //类名:Vertex //属性: //方法: class Vertex{ public char label; //点的名称,如A public boolean wasVisited; publ ...
- JVM大端判断
JVM采用大端方式存多字节的数据,判断方法如下: public static void bytesToInt() throws IOException { /** * 将字节数组(byte[])转为整 ...
- sublime2使用jshint
合理配置Jshint可以帮助写出高质量的代码,通过sublime2插件 JSHint Gutter 可以迅速提供开发效率和减少bug的个数. 1.安装JSHint Gutter插件 sublime2按 ...
- [Java] JSP笔记 - Java Bean
一. Java Bean 是什么? Java Bean 其实就是一个符合特定规则的 Java Class.这些规则包括: 使用 public 声明的公用类 属性使用public 的get,set方法访 ...