接上篇毕设利器,教你从零搭建一个有规范的spring boot项目【三】—— 返回结果的处理和统一异常处理
我现在想新增一个用户。
写好了代码如下:
可以看到我做了名字不能为空的参数校验。
参数校验这个是一定要做的,鬼知道别人会调用你的接口给你些什么数据。
但真要做起来,其实还是要费不少功夫的。
我上面这个demo还好,只有一个参数,万一参数多起来了,难道要像下面这样嘛?
想想还真有点累。
不好意思,上面的代码打错了,应该是StringUtils.isBlank(userVO.getName())
才对,不过意思表达到位了即可,大家不要在意,其实是懒得再重新截图哈哈哈哈哈。
还是找点简单的方法吧。
这样的方法自然早就有人给你写好啦。
引入下面的依赖:
<!-- 参数校验 -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-validation</artifactId>
</dependency>
引入进来之后,在接受参数的类中做如下注解:
作用其实看名字和message都可以看出来,这里不多做赘述。
然后在接受参数的时候加上@Valid注解即可做校验。
@RequestBody注解之后再说明。
这样,可以回去删掉之前的校验代码。
现在代码变成如下这样:
我们就可以不用费劲写太多校验代码了,更多地专注业务逻辑的代码。
但是有些不那么通用的校验还是要自己写才行。
运行项目。
因为是post,不能直接用浏览器调用接口,用接口调试工具试试。
调试结果如下:
输入符合规范的数据,再调一次接口:
可以看到接口返回调用成功的数据:
数据库也有了数据:
参数校验其实就这么简单,本来就是用来节省大部分重复工作的,提出来的方案自然是越简单越好
接下来说说@RequestBody注解。
@RequestBody是用来配合post和put请求的。
如果你用的@GetMapping注解,再在参数那里加这个注解,是会报错的。
当然加了@RequestBody的注解,前端的请求方式也要有所改变,请求方式要注明dataType: application/json。
具体你可以看我的这篇文章《SpringBoot同时接收单个对象和List<object>参数》
之前的get请求,要求你把参数带在url后面,比如localhost:8080/user?id=1这样,就是查询id为1的用户。这种请求带过去的参数是明文的,并且还有长度限制。
但post请求+@RequestBody注解,会把参数放在下面这里。
图中的请求,换成get也行,不过就会变成xxx.com/login?account=admin&password=123456&type=1。这样你的密码就明晃晃地出现在浏览器的地址栏上了。
登录,或者参数比较多,或者新增、编辑某些信息的时候多数用这种方式。
1是稍微安全点,总比你登陆一下账号密码都写在url上,让别人一下就看到好。
2是长度足够,get请求的长度是有限制的。
有什么问题可以留言,看到了都会尽量帮忙解决。
2021-10-02更新,下一篇在这里:《毕设利器,教你从零搭建一个有规范的spring boot项目【五】——用户身份信息验证》