00:00
好,然后呢,我们刚才通过控制器的方法的行参来获取了请求参数,但是咱们是不是有一个要求,要求是什么,咱们的行参的参数名必须要跟咱们请求参数的参数名是不是保持一致,对不对,这个时候才能够正常获取,那如果说他要不一致怎么办呢。啊,大家想一想,如果要不一致的怎么办,比如说呀,我们现在找到我们的页面,然后咱们的页面里面,在这它不叫user name了,然后它叫user下划线内,大家说可不可以啊。可不可以啊,可以,那这个时候它还能够正常匹配吗?还能够为我们当前咱们的请求参数赋值吗?还能为咱们的请参赋值吗?不能对吧,来大家看,然后我们在这咱们再来一个重新部署,或者说你不重新部署也行,你自己在这把它给加上一个下划线也可以,是不是是吧?好,大家看好了,我现在来一个回车,或者说咱们先来访问咱们的这个页面,然后呢,这是A的in,然后123A。
01:08
BC来执行大家看一下啊,好,咱们直接把它给拉到最后,大家看u name获取到了没,没有获取到能看懂吧,哎,没有获取到啊好,然后没有获取到,那说明只要是我们当前的请求参数名跟咱们行参的名字不一致,那咱们就是,那咱们就没有办法来获取这个值对不对,对吧?好然后那我们下面咱们应该怎么办呢?那咱们以后也会遇到这种情况,对不对,对吧?那如果我们遇到了这种情况,就陈老师你把它改了行不行,对吧?那咱们以后咱们说过对吧,要对修改关闭,对扩展开放是不是啊,那有可能我们当前咱们没有办法去改咱们的源码,那这个时候我们就需要在我们的控制器中,然后来加上一个相对应的注解来解决这个问题了,哪个注解呢?大家来看啊,来,我把这个给它换一个行啊,好,大家看用什么注解在这呢。
02:09
咱们springc中为我们提供了一个请求参数的注解,叫做request per,能看懂吗?有一个叫request per,然后这个东西就是干嘛的呢?将我们的请求参数跟我们的行参来创建映射关系的,能听懂不?也就是说你要拿着我们当前的哪一个请求参数去对应我们的哪一个擎参,能听懂吧?哎,知道什么意思不好啊,比如说那我们当前咱们的这个页面里面,咱们传输过来的请求参数,咱们要把哪一个请求参数跟u name相对应啊,大家说是不是要跟要把咱们的优点下划线内幕跟咱们的行参优点内去对应对不对?好,那这个时候我们就可以通过这种方式来实现能看懂吧?好,下边来咱们重新部署,大家看一下好使不好使啊?
03:09
好,来,咱们清空一下,好,然后在这呢,咱们再来刷新音,好,这是a me123,然后ABC,然后点击大家看一下啊阿me获取到了没?获取到了OK啊,所以说非常简单,当然了,咱们的这个注解呢,然后它里面还有一些其他的属性,什么属性呢?比如说大家来看啊,好,然后其中的属性一共有三个,大家看好首先呢,这里面就是咱们的value,然后呢,这个name跟咱们的value是不是一样的,Less for less什么意思?学过my babies less是不是叫别名啊,对不对,也就是说这个name是谁的别名,Value的别名,所以说它们两个一样不一样啊,想你看value上是不是还加了一个a less for name,所以说它们两个是一样的效果,OK吧,好,再往下大家看,在这有一个required required,是什么意思啊?Required代表的是不是应该就是啊。
04:08
是否必须吗?Required,咱们原来在讲spring的时候,大家有没有印象,咱们在完成一个自动装配的时候,基于注解的自动装配的时候,对不对,对吧?我们基于叉ML的自动装配呢?是你设置了自动装配之后,它能装配则装配,装配不了就拉倒,拉倒是什么意思?就是默认值null,大家说对不对,对吧?但是当我们使用了基于注解的自动装配的时候,如果说我们当前装配不了,就是在IOC容器中没有任何一个,并能够为当前的属性自动赋值,那这个时候它就会给我们报一个错呀,是不是跟咱们基于叉ML的方式这个自动装配一样不一样不一样,给咱们报的错叫no such a big DeFinition exception,是不是,是吧,为啥呀?
05:02
因为这个注解它还是能装配就装配,装配不了拉倒吗?不是对吧?然后为什么咱们从那个错误信息上咱们可以看出来,因为我们自动装配的这个注解it out wild里边有一个属性叫做repair,有印象没,那不就是必须的意思吗?而且那个repair的默认值也是什么,也是处代表什么,必须自动装配,装配不了就报错,报的是spring的错,能听懂不好啊,那所以说我们要想来解决这个问题,其实咱们也不用解决。咱们以后既然要想为属性自动装配,那IOC容器中必定得有这个B,大家说是不是对吧?好,那我们要想来解决报spring的这个错的问题啊,咱们可以把它的require设置为false,那这个时候是不是就变成了能装配则装配,装配不了则使用默认值是不是,是吧?但是呢,说实话没有什么意义,是不是啊,咱们以后既然要自动装配,那一定是能够装配的,对不对啊,好啊,行,所以说这个require代表的是什么意思啊,必须,那默认值是啥to啥意思啊,大家看好啊,你看。
06:18
大家记不记得我不加这个注解的时候,咱们刚才是不是映射不到啊,请求参数跟咱们的这个行参是不是映射不到,那所以说咱们的这个行参的值就是null,大家有印象没有印象吧?好,然后大家再看啊,Repair是什么意思?你只要用了这个注解,那我们的value所对应的请求参数你就必须得传输,如果你不传它就报错能听懂不?也就是说ard来指的是什么的?必须来指的是我们当前咱们的这个注解所所操作的这一个请求参数是必须进行传输的,如果你不传输它就报错能听懂吧?来大家看这默认record是不是true呀,咱们需要改了,不需要吧,默认就是true对不对?所以说来我可不可以把它给改了,咱们就不用刷新界面了嘛,对不对,对吧,我直接在这把咱们的优点下划线内幕我直接把它给删掉,那咱们是不是就只传了一个password和hobby,对不对,对吧?来一个回车之后大家看400啥意思,叫做required string pass parameter user_name is not。
07:38
Present present什么意思啊,存在对不对?说我们当前咱们必须的一个参数U下划线内幕存在不存在,不存在那说明啥?说明如果咱们设置的这个注解啊,如果咱们没有将required设置为false,如果它默认值为true,那我们当前我们的这个value流所对应的请求参数,你就必须要传输,能听懂不能听懂吧,必须要传输啊。
08:10
那咱们能不能把它改成for呀?可不可以啊来value等于它,然后下面呢,咱们在这来写一个required,然后等于false OK,下面咱们再来重新部署,大家来看。那设置为false,那不就是不必要不必须去传嘛,是不是啊是吧。我感觉他又卡了。刷新。啊,没有是吧,哦ME123ABC。这个时候应该是没问题的,对吧,因为这个时候咱们传了没有传了,虽然说咱们把它改成了false,对吧,那是不必须要传,那咱们传过来可不可以啊,可以啊,好,我现在来执行,大家看没问题,那如果我现在我把这个东西给它删掉,它默认值为处,要求必须传输,那咱们现在写成了false,还是必须传输吗?不是,所以说大家看这个没问题,下面我们在这咱们再来一个执行,大家看有问题吗?没有看这个地方,大家看是null,不是,所以说它的第二个属性re repair的,然后代表的是是否必须传输value所对应的请求参数,能听懂吧,默认值为处,也就是必须要传,当我们设置为负词的时候,什么意思啊,就是有则负值,没有默认值null,能听懂吧?好啊,行,然后下面大家再看。
09:46
那里面还有一个比较重要的属性,什么default value default value,什么叫default value叫做默认值,那什么叫做默认值呢?默认值代表的就是二,哎,大家想想是什么时候会给我们的行参赋一个默认值啊,不传的时候是不是啊,那咱们就测试一下呗,你比如说我在这来写一个叫做对吧,呵呵,可不可以啊,可不可以,可以咱们来看一下他什么时候是,呵呵,行吧,咱们看一下你不传他是不是,呵呵,你传的什么值的情况下,它也是合格,OK吧,好,来大家看啊,好,咱们来重新部署。
10:38
来看好,咱们就拿着这个写吧,行不行,直接刷新,大家说咱们现在传了没有没有传一个回车成功了,在这大家来看啊,又是缓存是不是啊是吧,那咱们就改一下这个值吧,123456行不行,好来一个回车,然后大家看一下,呵呵,有没有九说明如果我们不传输这个请求参数,是不是会使用默认值对不对,那咱们再往下大家看好那比如说我传一个咱们叫U点下划线内等于完了,哎,这个东西大家见过没有这种情况,见过没有,就是如果我们当前咱们的这个文本框里面,你什么都没有输入的话,它长的就是这样的,能听懂吗?能听懂吗?好,然后所以说呢,下面大家再看,然后我现在如果说我传输了这个请求参数,但是呢,我没有为当前的。
11:38
文本框,然后来输入任何的内容,那当他提交之后,那其实就相当于传过来了一个空字符串嘛,大家说是不是啊,大家想想你的文本框你什么都不输入是不是就相当于value等于空字符串是不是?大家原来应该也都用过咱们的view对不对?你要想将一个文本框给它清空,那不就是先获取这个文本框,然后点value等于空字符串是不是?所以说文本框里面什么都不输入,就相当于VALUE6等于谁空字母串,OK吧,好,下边咱们在这再一个回车,大家看一下啊,来走到这什么还是和呵,能看懂吧,啊,还是和呵,所以说这个大家要注意,那我们当前咱们的这一个注解就devot value,它一般情况下给我们解决什么问题啊,就比如说如果我们当前咱们在访问我们当前的这个请求映射的时候,如果我们没有传输某一个。
12:38
子求参数,也就是说咱们的这个请求参数是可传可不传的,那我们是不是就可以干嘛来给它通过it request per来给它设置一个默认值,能听懂吧?大家注意在我们当前咱们的这个注解里面,这个default value其实要比咱们的value和required用的更多,能听懂不好,为啥呢?
13:03
其实这个你说他们两个的名字不一样,其实咱们改成一样的就完事,对不对,对吧?但是咱们的这个功能,大家说那我们是不是如果你不用这个注解,我们是不是就得用一个判断或三目运算符实现这个效果,大家说是不是啊,是不是啊,但是咱们现在有了这个注解啊,我们既可以来解决请求参数和我们行参之间的关系,然后也可以在没有传的情况下,或者说传输了一个空磁不串的情况下,来为它设置一个默认值,能听懂吗?能听懂吧?啊来给它设置一个默认值啊,好OK,来咱们来看一下咱们的笔记,好将请求参数和控制器方法的形参干嘛?创建映射关系,一共三个注解,一三个属性,第一个指定位行参赋值的请求参数的参数名有问题没,没问题吧,Require设置。
14:03
是否必须传输此请求参数?默认值为处,若设置为处时,那当前请求是不是就必须得传输这个请求参数?如果没有传给我们报的是400,大家说对不对,对吧?当然在这儿大家注意我还写了一句话叫做并且你没有设置det value,因为大家都知道,如果你要是没有传输的话,如果咱们也设置了deat value,是不是就会自动为当前的行参赋值默认值能听懂不啊?所以说大家注意,如果你只设置了value和repair的,没有设置它,那我们没有传输这个请求参数的时候,就会报400,若设置为false的话,则当前请求不是必须传输VALUE6所指定的请求参数,那没有传那就是啥null。OK吧,好啊,现再往下default value,大家注意,这个时候它就不管你的required了,不管你设置的是true还是false,只要咱们当前的请求参数没有传输,然后或或传输的值为空字符串,我这样写能看懂吗?哎,为空字符串时则使用默认值微型算符值能听懂吧,能听懂吧,好,OK啊,行,那这个是我们的request per注解干啥呢?来为我们当前的请求参数和我们控制器方法的行参创建映射关系,OK吧啊。
我来说两句