简介
此项目用于演示如何使用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组件,更多参数校验的使用姿势,可以参考官方教程