首页 > 其他分享 >MVC应用单元测试以及请求参数的验证

MVC应用单元测试以及请求参数的验证

时间:2024-09-15 21:53:24浏览次数:3  
标签:String 验证 对象 request 单元测试 校验 MVC user

SpringMVC支持对Controller单元测试

@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(locations = {
	"classpath:mvc-dispatcher-servlet.xml",
})
@WebAppConfiguration
public class ControllerJUnitBase{
	
	@Resource
	private RequestMappingHandlerMapping handlerMapping;
	@Resource 
	private RequestMappingHandlerAdapter handlerAdapter;
	
	//执行request对象请求的action
	public ModelAndView excuteAction(HttpServletRequest request,HttpServletResponse response)throws Exception{
		
		HandlerExecutionChain chain = handlerMapping.getHandler(request);
		
		final ModelAndView model = handlerAdapter.handle(request,response,chain.getHeader());
		return model;
	}

	@Test
	public void test throws Exception(){
		
		//Mock构建request,response
		MockHttpServletRequest request = new MockHttpServletRequest();
		request.setRequestURI("/api/user/login");
		request.setParameter("mobile","190xxxx1234");
		request.setMethod("POST");
		MockHttpServletResponse response = new MockHttpServletResponse();
		
		final ModelAndView mav = this.excuteAction(request,response);
		Assert.assertEquals("user_login",mav.getViewName());
	}
}		

验证Web请求参数

一、通过Spring框架定义的Validator接口定义的校验

public class UserValidator implements Validator{
	
	@Override
	public boolean supports(Class<?> clazz){
		return clazz.equals(User.class);
	}

	@Override
	public void validate(Object target,Errors errors){
		ValidationUtils.rejectIfEmpty(errors,"name","user.name.required","用户名不能为空");
		User user = (User)target;
		if(length > 10){
			errors.rejectValue("name","user.name.too_long","用户不能超过20个字符");
		}
	}
}	

在Controller里增加方法并以@InitBinder注解在对应的Controller方法中触发

@InitBinder
protected void initBinder(WebDataBinder binder){

	binder.setValidator(new UserValidator());
}

@RequestMapping(method = RequestMethod.POST)
public String reg(@Validated User user,BindingResult result){
	
	//如果校验没有通过
	if(result.hasErrors()){
		return "user";
	}
	if(user != null){
		userService.saveUser(user);
	}
	return "user";
}

从页面提交的User对象,通过实现的UserValidator类校验,校验结果存入BindingResult对象中

二、支持JSR-303 Beam Validator定义的校验规范

不仅可以对Spring的MVC进行校验,也可以对Hibernate的存储对象进行校验
引入hibernate-validator,并开启MVC注解mvc:annotation-driven/

还需要对校验的meta类的属性做注解限制

  • @Null 验证对象是否为空
  • @NotNull 验证对象是否为非空
  • @AssertTrue 验证Boolean对象是否为true
  • @AssertFalse验证Boolean对象是否为false
  • @Min 验证Number和String对象是否大于或等于指定的值
  • @Max 验证Number和String对象是否小于或等于指定的值
  • @DecimalMin 验证Number和String对象是否大于或等于指定的值,需要注意小数的精度问题
  • @DecimalMax 验证Number和String对象是否小于或等于指定的值,需要注意小数点的精度问题
  • @Size 验证对象(Array,Collection,Map,String)长度是否在给定的范围内
  • @Digits 验证Number和String的构成是否合法
  • @Past 验证Date和Calendar对象是否在当前时间之前
  • @Future 验证Date和Calendar对象是否在当前时间之后
  • @Pattern 验证String对象是否符合正则表达式的规则

此外hibernate-validator也提供了一些注解支持

  • @NotEmpty 验证对象不为NULL也不为empty
  • @NotBlank 验证对象NULL也不为empty,连续的空格也被认为是empty
  • @Range 验证对象在指定的范围内

配置:只要队被校验的meta注解Constraint

public class User{
	
	@NotNull
	private String name;
}

然后Controller对应的方法中,给对应的参数@Valid注解

public String doRegister(@Valid User user,BindingResult result){

	//校验没有通过
	if(result.hasErrors()){
		return "user";
	}
	if(user != null){
		userService.saveUser(user);
	}
	return "user";
}

这样就完成了针对输入数据User对象的校验了,校验结果保存在BindingResult对象中
BindingResult参数如果放在验证参数的后面,那么错误信息是会绑定到此BindingResult上的,否则会抛出MethodArgumentNotValidException异常

标签:String,验证,对象,request,单元测试,校验,MVC,user
From: https://blog.csdn.net/usa_washington/article/details/142273825

相关文章

  • 力扣热题100 - 二叉树:验证二叉搜索树
    题目描述:题号:98给你一个二叉树的根节点 root ,判断其是否是一个有效的二叉搜索树。有效 二叉搜索树定义如下:节点的左子树只包含 小于 当前节点的数。节点的右子树只包含 大于 当前节点的数。所有左子树和右子树自身必须也是二叉搜索树。解题思路:思路一......
  • SpringMVC映射请求;SpringMVC返回值类型;SpringMVC参数绑定;
    一,SpringMVC映射请求SpringMVC使用@RequestMapping注解为控制器指定可以处理哪些URL请求1.1@RequestMapping修饰类注解@RequestMapping修饰类,提供初步的请求映射信息,相对于WEB应用的跟目录。注:                如果在类名前,使用了注解@RequestMapping......
  • dedecms后台登录验证码不正常显示怎么办
    当DEDECMS后台登录验证码不正常显示时,可能是由多种原因造成的。以下是一些常见的解决方法:1.检查服务器的PHP版本PHP版本兼容性:确保服务器的PHP版本与DEDECMS版本兼容。DEDECMS对于不同的PHP版本有不同的支持程度,过时或不兼容的PHP版本可能导致验证码显示问题。2.检查验证码......
  • 忽略SSL证书验证
    HTTP&HTTPSHTTPS为安全超文本传输协议,是HTTP的安全版本,它在HTTP和TCP/IP之间增加了一个SSL/TSL层(安全套接层/传输层协议),用于加密HTTP的通信内容。SSL证书一种数字证书,用于在SSL/TLS协议中验证服务器的身份,并启用加密通信。是HTTPS通信中身份验证的关键,当浏览器尝试通过HTTPS连......
  • OpenCV和Tesseract OCR识别复杂验证码喽~~
    目录代码实现思路流程:主要流程:整体代码效果展示原图处理之后的图总结流程图代码实现思路使用OpenCV进行图像预处理,并通过TesseractOCR来识别验证码中的字符。以下是其实现思路的详细讲解:流程:加载验证码图像:使用cv2.imread()读取验证码图片,将其加载为......
  • SSM中 的SpringMVC
    目录前言一、SpringMVC是什么?二、所遇到的一些问题1.中文乱码2.路径跳转前言虽然说SSM框架这个技术已经很老了,但是我个人觉得学完之后还是有很多启发的,同时也是作为一个基础去学习后面更多的框架知识。一、SpringMVC是什么? (B/S)web开发的轻量级框架。工作......
  • FVFL: A Flexible and Verifiable Privacy-Preserving Federated Learning Scheme--FV
    FVFL:AFlexibleandVerifiablePrivacy-PreservingFederatedLearningScheme--FVFL:一种灵活且可验证的隐私保护联邦学习方案来源导读AbstractIntroductionProblemStatementA.ProblemDefinitionB.ThreatModelandGoalsPreliminariesA.FederatedLearning(......
  • MVC项目实战-基于JSP的MVC设计模式实现投票系统
    前言本博客将介绍基于JSP的MVC设计模式实现投票系统,实现两个功能:功能一:投票功能二:查看投票结果 第一步:设计数据库,创建JavaWeb项目,配置pom.xml文件,创建实体类数据库: 数据库中的t_vote包含三个字段:id,v_name,v_numid:主键,一行数据的唯一标识v_name:参与投票的对象名......
  • MVCC与锁
    MVCC与锁锁基本原理当事务想要改动记录时,会查看内存中有没有跟该记录相关联的锁结构没有的话就生成一个is_waiting为false的锁结构与之关联,代表获取锁成功;如果发现该记录已经有锁关联了,会生成一个is_waiting为true的锁结构,代表获取锁失败,进入等待状态;如果加锁的事务结束,将释......
  • 某讯/企鹅滑块验证码逆向(一)
    文章目录免责声明前言请求分析collect参数总结免责声明本文章中所有内容仅供学习交流使用,不用于其他任何目的,不提供完整代码,抓包内容、敏感网址、数据接口等均已做脱敏处理,严禁用于商业用途和非法用途,否则由此产生的一切后果均与作者无关!前言某讯滑块验证码逆向......