Popular MVC框架集成springboot validation 接口参数校验使用示例

简介

此项目用于演示如何使用popularmvc做接口系统参数校验、请求参数校验、响应参数校验

项目示例

1 项目结构

  • 项目结构

    ├─src
    │  └─main
    │     └─java
    │       └─com
    │           └─danyuanblog
    │               └─framework
    │                   └─demo
    │                       └─popularmvc
    │                           ├─controller
    │                           │  │  
    │                           │  ├─dto
    │                           │  │  │ 
    │                           │  │  │  ParamsCheckDto.java
    │                           │  │  │  
    │                           │  │  └─ CustomRequest.java 
    │                           │  │  
    │                           │  │  TestValidateSystemParamsController.java
    │                           │  │  
    │                           │  │  TestValidateRequestParamsController.java
    │                           │  │  
    │                           │  └─ TestValidateResonseParamsController.java
    │                           │          
    │                           └─startup
    │                                   StartDemoApplication.java #项目启动类
    └─  pom.xml
    
    
  • 引入模块依赖,在pom.xml添加

	<dependency>
		<groupId>com.danyuanblog.framework</groupId>
		<artifactId>popular-web-mvc</artifactId>
		<version>${popular-web-mvc.version}</version>
	</dependency>

2 启用PopularMvc框架

/**  
* Title StartDemoApplication.java  
* Description  
* @author danyuan
* @date Oct 31, 2020
* @version 1.0.0
* site: www.danyuanblog.com
*/ 
package com.danyuanblog.framework.demo.popularmvc;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import com.danyuanblog.framework.popularmvc.annotation.EnablePopularMvc;

@SpringBootApplication
@EnablePopularMvc
public class StartDemoApplication {

	public static void main(String[] args) {
		SpringApplication.run(StartDemoApplication.class, args);
	}
}

3 参数校验示例

3.1 校验系统参数

popularmvc内置了部分系统参数,也提供了定制和拓展系统参数的能力,使用方可以对这些系统参数做非空校验。

  • 接口源码TestValidateSystemParamsController.java

    /**  
    * Title TestValidateSystemParamsController.java  
    * Description  
    * @author danyuan
    * @date Dec 27, 2020
    * @version 1.0.0
    * site: www.danyuanblog.com
    */ 
    package com.danyuanblog.framework.demo.popularmvc.controller;
    
    import io.swagger.annotations.Api;
    import io.swagger.annotations.ApiOperation;
    
    import org.springframework.validation.annotation.Validated;
    import org.springframework.web.bind.annotation.GetMapping;
    import org.springframework.web.bind.annotation.PostMapping;
    import org.springframework.web.bind.annotation.RestController;
    
    import com.danyuanblog.framework.popularmvc.annotation.RequiredCountryCode;
    import com.danyuanblog.framework.popularmvc.annotation.RequiredCurrency;
    import com.danyuanblog.framework.popularmvc.annotation.RequiredLocale;
    import com.danyuanblog.framework.popularmvc.annotation.RequiredParam;
    import com.danyuanblog.framework.popularmvc.annotation.RequiredTimeZone;
    import com.danyuanblog.framework.popularmvc.annotation.RequiredTimestamp;
    import com.danyuanblog.framework.popularmvc.annotation.RequiredVersion;
    
    @RestController
    @Validated
    @Api(tags = "校验系统参数接口列表")
    public class TestValidateSystemParamsController {
    	
    		@GetMapping("testSingleInnerSystemParams")
    		@PostMapping("testSingleInnerSystemParams")
    		@ApiOperation(value="测试校验系统参数(逐个校验)", notes="测试校验系统参数(逐个校验)")
    		@RequiredLocale
    		@RequiredCountryCode
    		@RequiredCurrency
    		@RequiredTimestamp
    		@RequiredTimeZone
    		@RequiredVersion
    		public String testSingleInnerSystemParams(
    				) {
    			return "参数校验通过!";
    		}
    		
    		@PostMapping("testMultiInnerSystemParams")
    		@GetMapping("testMultiInnerSystemParams")
    		@ApiOperation(value="测试校验系统参数(批量校验)", notes="测试校验系统参数(批量校验)")
    		@RequiredParam({"locale","currency"})
    		public String testMultiInnerSystemParams(
    				) {
    			return "参数校验通过!";
    		}
    }
    

3.2 校验接口请求参数

popularmvc提供了自动校验接口请求参数的能力,包括域模型参数、基础参数等等。这将辅助接口使用者更清晰的知道错在了哪,规范了接口的输入,使得业务逻辑无需再手动校验参数的合法性。

  • 接口源码TestValidateRequestParamsController.java

    /**  
    * Title TestValidateRequestParamsController.java  
    * Description  
    * @author danyuan
    * @date Dec 27, 2020
    * @version 1.0.0
    * site: www.danyuanblog.com
    */ 
    package com.danyuanblog.framework.demo.popularmvc.controller;
    
    import java.util.HashMap;
    import java.util.Map;
    
    import javax.validation.Valid;
    import javax.validation.constraints.NotBlank;
    import javax.validation.constraints.Size;
    
    import io.swagger.annotations.Api;
    import io.swagger.annotations.ApiOperation;
    
    import org.hibernate.validator.constraints.Range;
    import org.springframework.validation.annotation.Validated;
    import org.springframework.web.bind.annotation.GetMapping;
    import org.springframework.web.bind.annotation.PostMapping;
    import org.springframework.web.bind.annotation.RequestBody;
    import org.springframework.web.bind.annotation.RequestParam;
    import org.springframework.web.bind.annotation.RestController;
    
    import com.danyuanblog.framework.demo.popularmvc.controller.dto.ParamsCheckDto;
    
    @RestController
    @Validated
    @Api(tags = "校验请求参数接口列表")
    public class TestValidateRequestParamsController {
    				
    		@PostMapping("testModelParamsCheck")
    		@ApiOperation(value="测试校验域模型请求参数", notes="测试校验域模型请求参数")
    		public String testModelParamsCheck(@RequestBody ParamsCheckDto req){
    			return "参数校验成功!";
    		}
    		
    		@GetMapping("testBaseTypeParamsCheck")	
    		@ApiOperation(value="测试校验基础类型请求参数", notes="测试校验基础类型请求参数")
    		public Map<String, Object> testBaseTypeParamsCheck(
    				@Valid @Size(min=6, max=20) @NotBlank @RequestParam String username, 
    				@Valid @NotBlank @Size(min=6, max=32) @RequestParam String password, 
    				@Valid @Range(max=200, min=1, message = "年龄只能在1-200岁之间!") @RequestParam Integer age){
    			
    			Map<String,Object> userInfos = new HashMap<>();
    			userInfos.put("username", username);
    			userInfos.put("age", age);
    			userInfos.put("password", password);
    			
    			//返回数据
    			return userInfos;
    		}
    
    }
    
  • 源码ParamsCheckRequest.java

    /**  
    * Title ParamsCheckRequest.java  
    * Description  
    * @author danyuan
    * @date Nov 29, 2020
    * @version 1.0.0
    * site: www.danyuanblog.com
    */ 
    package com.danyuanblog.framework.demo.popularmvc.controller.dto;
    
    import io.swagger.annotations.ApiModel;
    import io.swagger.annotations.ApiModelProperty;
    
    import java.io.Serializable;
    import java.util.List;
    
    import javax.validation.constraints.Email;
    import javax.validation.constraints.NotBlank;
    import javax.validation.constraints.NotNull;
    import javax.validation.constraints.Size;
    
    import org.hibernate.validator.constraints.Range;
    
    import lombok.Data;
    
    @Data
    @ApiModel
    public class ParamsCheckDto implements Serializable{/** 
    	 *serialVersionUID
    	 */
    	private static final long serialVersionUID = 1L;
    	
    	@NotBlank
    	@Size(max=10, min=10, message = "账号长度只能为10!")
    	@ApiModelProperty(value = "用户账号", required = true, example = "1321122321")
    	private String account;
    	
    	@Email
    	@ApiModelProperty(value = "用户邮箱号")
    	private String email;
    	
    	@NotNull
    	@Range(max=200, min=1, message = "年龄只能在1-200岁之间!")
    	@ApiModelProperty(value = "用户年龄", required = true)
    	private Integer age;
    	
    	@Size(max=3, min=0, message = "最多只能选择3个爱好!")
    	@ApiModelProperty(value = "用户爱好")
    	private List<String> likes;//爱好
    }
    

3.3 校验响应参数

popularmvc同样可以校验接口响应参数,用以规范接口开发者。

  • 源码TestValidateResonseParamsController.java

    /**  
    * Title TestValidateResonseParamsController.java  
    * Description  
    * @author danyuan
    * @date Dec 27, 2020
    * @version 1.0.0
    * site: www.danyuanblog.com
    */ 
    package com.danyuanblog.framework.demo.popularmvc.controller;
    
    import io.swagger.annotations.Api;
    import io.swagger.annotations.ApiOperation;
    
    import java.util.Arrays;
    
    import org.springframework.web.bind.annotation.GetMapping;
    import org.springframework.web.bind.annotation.RestController;
    
    import com.danyuanblog.framework.demo.popularmvc.controller.dto.ParamsCheckDto;
    
    @RestController
    @Api(tags = "校验接口响应参数接口列表")
    public class TestValidateResonseParamsController {
    		
    		@GetMapping(value="testResponseFieldCheck",
    				name="测试校验响应参数")
    		@ApiOperation(value="测试校验响应参数", notes="测试校验响应参数")
    		public ParamsCheckDto testResponseFieldCheck(
    				) {
    			ParamsCheckDto dto = new ParamsCheckDto();
    			dto.setAccount("111222");
    			dto.setAge(25);
    			dto.setEmail("xxx");
    			dto.setLikes(Arrays.asList("football","watch movie","swiming","book"));
    			return dto;
    		}
    		
    }
    

拓展

popularmvc的参数校验使用的是springboot内置的validator组件,更多参数校验的使用姿势,可以参考官方教程

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值