1. 程式人生 > 其它 >Popular MVC框架整合springboot validation 介面引數校驗使用示例

Popular MVC框架整合springboot validation 介面引數校驗使用示例

技術標籤:popularmvc系列使用教程springbootjavaspringbootpopularmvcapivalidation

簡介

此專案用於演示如何使用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元件,更多引數校驗的使用姿勢,可以參考官方教程