Popular MVC框架整合springboot validation 介面引數校驗使用示例
阿新 • • 發佈:2021-01-07
技術標籤:popularmvc系列使用教程springbootjavaspringbootpopularmvcapivalidation
簡介
此專案用於演示如何使用popularmvc做介面系統引數校驗、請求引數校驗、響應引數校驗
專案示例
1 專案結構
-
專案結構
├─src │ └─main │ └─java │ └─com │ └─danyuanblog │ └─framework │ └─demo │ └─popularmvc │ ├─controller │ │ │ │ │ ├─dto │ │ │ │ │ │ │ │ ParamsCheckDto
-
引入模組依賴,在
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元件,更多引數校驗的使用姿勢,可以參考官方教程