发表于: 2020-02-07 22:25:55
3 1335
今天完成的事:
1、分组校验。
之前是打算只有条件列表查询、增加、编辑需要校验参数,想着条件查询因为不能非空校验,所以单独写的各个参数,但是需要set变量数据,这样的话就需要set前进行非空判断,否则会报异常,这就很麻烦,所以就添加了分组校验。
之前是类似下图,一个个变量校验,但是需要将变量set入实体类,若为空,则set会报异常。。所以只能分组。
首先在实体类中添加接口,并继承 default 类。
接口的添加找了很多,没有明确说是单独建立一个接口类还是怎么着,只在两个例子中看到接口写在了实体类中,就这样写了。。
继承 default 类,是因为在进行分组后,如果分组较多,当一个变量各组都需要校验时,就不需要一个一个写组名了,而是直接写 default 即可。
分别写组名,以及写default,效果是一样的。
controller类中,在实体类前添加注解即可,但是这里需要注意,无法使用@Valid,会报错,不支持分组校验,只能使用 @Validated。
测试成功。
2、@PathVariable 注解的使用。
@PathVariable 注解是用来获取url中的数据值的,也就是获取“/{id}”中的id。
required = false 表示非必须的,即不添加不会报错,这里默认是true。
但是“/{id}”中的id不添加的话,就报错没有这个url。
这里 required = false 没有意义。
需要如下图修改。
也就是说如果 @RequestMapping 的 value 不加“/b/video/”(“/b/video”也行,这里感觉“/b/video/”好点)就会报错,而不是自己定义的异常。
而如果不添加 required = false ,则因为 @RequestMapping 对应的有“/b/video/”,不包含“{id}”,所以会报错。
若不添加“/b/video/”,就无法表示 id 为空,也就无法进行校验,所以这里只能添加 required = false 。
所以,最终代码如下,当id为空时,会进行非空校验,课程实体类 Course 会按照 update分组 进行参数校验,且 id 单独独立出去校验,而后将id设置到course中即可。
但是这样其实就可以将update和insert合二为一了,因为两个本来区别就是update需要校验id。。
明天计划的事:
1、继续编写业务逻辑。
遇到的问题:
1、有两个url,其中一个我在postman中写错了。结果两个url都访问其中一个url了。
url错了不应该是请求不到吗,或者显示错误,没有该url,但是这里不知道为什么,却能访问另外一个url。。两个url唯一的区别就是前面的地址时一样的,就最后一个有区别。。
上面第二个图的url一个单词错误,但是这样不就代表url路径有误吗,应该报错啊,为什么会访问上一级的url路径呢。。还可以获取入参数据。。
2、请求中,加号“+”会转为 空格 ,空格则还是空格。。
经过测试,只有在url上拼接参数时,会默认转为 空格 ,前端将请求参数放在请求体内就不会转化。。
目前还没有很好的解决办法,拦截器可以操作吗,所有的参数名称都是一一对应的,拦截器里进行字符串的替换要怎么替换。。
收获:
1、分组校验。
2、@PathVariable 注解的使用。
评论