博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
用SpringCloud Alibaba搭建属于自己的微服务(九)~基础搭建~参数校验框架的使用
阅读量:4204 次
发布时间:2019-05-26

本文共 3863 字,大约阅读时间需要 12 分钟。

一.概述

在我们设计接口时,往往在逻辑最开始的地方,我们首先面临的就是参数校验,之后才是整体的业务逻辑实现.例如,通过手机号和验证码实现注册功能的接口,首先需要做的就是对手机号进行正则校验,验证码的长度是否正确.在我们引入参数校验框架之后,这些事情可以不用编码,直接使用注解就能完成参数校验框架了.

二.使用

1.@valid和校验注解的使用姿势

(1)例如一个用户注册的接口,有用户名和密码,我们需要对其进行非空校验.

(2)代码

package com.ccm.server.user.controller;import com.ccm.server.user.controller.req.ValidTestReq;import com.ccm.server.user.service.TestService;import org.springframework.beans.factory.annotation.Autowired;import org.springframework.web.bind.annotation.*;import javax.validation.Valid;/** * @Description 参数校验框架测试 * @Author ccm * @CreateTime 2020/7/10 11:37 */@RestController@RequestMapping(value = "validTest")public class ValidTestController {
/** * @Description 测试@valid注解 * @Author ccm * @CreateTime 2020/7/10 11:43 * @Params [validTestReq] * @Return java.lang.Object */ @PostMapping(value = "test01") public Object test01(@Valid @RequestBody ValidTestReq validTestReq) {
return validTestReq; }}
package com.ccm.server.user.controller.req;import lombok.Data;import javax.validation.constraints.NotBlank;@Datapublic class ValidTestReq {
@NotBlank private String username; @NotBlank private String password;}

@NotBlank是校验注解,类似的有很多,有正则校验的,校验长度的.

@valid是使这组注解生效一个开关功能.

(3).使用swagger进行接口测试

在这里插入图片描述执行后返回的数据,可以看到注解生效了.明显抛出了异常,spring响应了一个错误数据,虽然不算很友好.

{
"timestamp": "2020-07-10T03:46:44.633+0000", "status": 400, "error": "Bad Request", "errors": [ {
"codes": [ "NotBlank.validTestReq.username", "NotBlank.username", "NotBlank.java.lang.String", "NotBlank" ], "arguments": [ {
"codes": [ "validTestReq.username", "username" ], "arguments": null, "defaultMessage": "username", "code": "username" } ], "defaultMessage": "不能为空", "objectName": "validTestReq", "field": "username", "rejectedValue": null, "bindingFailure": false, "code": "NotBlank" }, {
"codes": [ "NotBlank.validTestReq.password", "NotBlank.password", "NotBlank.java.lang.String", "NotBlank" ], "arguments": [ {
"codes": [ "validTestReq.password", "password" ], "arguments": null, "defaultMessage": "password", "code": "password" } ], "defaultMessage": "不能为空", "objectName": "validTestReq", "field": "password", "rejectedValue": null, "bindingFailure": false, "code": "NotBlank" } ], "message": "Validation failed for object='validTestReq'. Error count: 2", "path": "/validTest/test01"}

2.@Validated和校验注解的使用姿势

(1)代码,显然@Length注解用来限制长度,我们限制了username和password字段的最大长度为2,类名上的@Validated注解则是使@Length注解生效.

package com.ccm.server.user.controller;import org.hibernate.validator.constraints.Length;import org.springframework.validation.annotation.Validated;import org.springframework.web.bind.annotation.PostMapping;import org.springframework.web.bind.annotation.RequestMapping;import org.springframework.web.bind.annotation.RequestParam;import org.springframework.web.bind.annotation.RestController;/** *  @Description @Validated注解测试控制层 *  @Author ccm *  @CreateTime 2020/07/10 14:02 */@Validated@RestController@RequestMapping(value = "validatedTest")public class ValidatedTestController {
/** * @Description @Validated注解测试 * @Author ccm * @CreateTime 2020/7/10 14:04 * @Params [username, password] * @Return java.lang.Object */ @PostMapping(value = "test01") public Object test01(@Length(max = 2) @RequestParam String username, @Length(max = 2) @RequestParam String password) {
return "O(∩_∩)O哈哈~"; }}

(2)swagger测试,可以看到,spring响应了500的状态码,提示长度不符合要求,控制台也打印了抛出的异常,验证@@Validated生效了.

在这里插入图片描述在这里插入图片描述

在这里插入图片描述

源码地址:

您的点赞、收藏、转发和关注是我持续创作的动力!

转载地址:http://uktli.baihongyu.com/

你可能感兴趣的文章