3.基础请求实现
前面的内容我们建立的新项目,不知道你的新项目跑起来心情如何。
但无论心情如何,都应该确保之前的你已经搞定了,而且已经准备好迎接下边的挑战了。
准备
上篇文章的Hello World项目
PostMan软件已经安装好
1. Get请求
了解Http的同学都知道网络请求包括get/post/put/delete等等方式,如果不清楚的话可以自行补课或者参考 本部分技术补充大致了解一下。
其实要说来,我们上篇文章的Hello实验也是get请求,那么正儿八经的get是啥样子?
在HelloController里继续写一个方法。
1 | /** |
这块代码发上来排版不是很好看,我这里简单解释一下,首先我们创建一个register方法,通过上述代码最上面的javadoc注释我们可以知道,他接受两个参数,一个是账号,一个是密码,返回注册的状态。
对于方法内部的逻辑我是简单的写了几句,如果用户名是surine,那么就提示不允许,否则就提示注册成功,我们可以简单的使用System.out.println来打印从前端接收的字段值,来检查到底是哪里出了问题
注解方面,register方法上面的注解RequestMapping我们上面提到过,他的value主要是我们的访问路径,而他的method主要是标识我们是一个GET方法,还是一个POST方法,或者其他,默认是GET,所以你需要GET方法的时候,也可以不写这个,这也就是我上面说,上篇文章学到的也是一个Get请求的原因了。
此外我们看到方法中每个参数都有一个@RequestParam,这里我想你应该可以想到,也就是我们客户端访问时候的字段名,到后台分发处理的时候,可以对应成相应的参数,上次我们学到的getHello接口,仅仅是没有参数而已。
好了,别的不多说,我们看看运行效果,点击运行后,我们在浏览器访问:localhost:8080/register
是一个错误页(PS:当本页面看不出什么东西来的时候,具体的错误可以去IDE控制台看),我们可以看到最后一行,name这个参数没有,产生这个的原因是这里的@RequestParam是默认每个字段必须要有值的,比如你想实现密码可以为空,你可以这么写
1 | "pswd", required = false) String pswdFromClient (value = |
当然这里面还有很多功能,比如设置默认值,想查看有的功能,可以使用快捷键 (按住Ctrl ,单击你要查看的方法,比如这里我们是RequestParam注解,就可以进入他的定义)
那么我们正常应该怎么访问?
1 | localhost:8080/register?name=surine&pswd=12345 |
Get请求请自行补课,我们传入了name=surine&pswd=12345,前端结果如下
后端控制台如下:
我们可以看到从前台发的东西传到后台来了,我们再来实施其他几种情况
用户名正常,密码不为空:
用户名正常,密码为空:
OK,如果你看到你期望的结果了,那么恭喜你,简单的get请求你已经会了。
2. Post请求
继续在HelloController中添加方法
1 | /** |
实现过Get请求的你对Post请求也没什么疑问吧,实现一个Get和实现Post是一样的,唯一的不同就是RequestMapping的method被我们改成了post。
那我们运行修改后的项目,打开Postman
图很粗糙,凑合看吧。
第一步选择请求方法,然后填入我们的请求地址,点击Body填入相应字段和字段值,点击Send按钮,即可看到相应信息。
同样,我们后端收到了。
再看一下另一种情况,账号为surine
可以看到我们后台的逻辑生效了。
此外由于这次我们设置允许字段可以为空,所以两个字段必须全部填写。
到这里你也学会了简单的Post请求了,可能你会有个小疑问,感觉看起来Get和Post请求一样啊,都是发数据然后获取相应结果,那什么时候需要get,什么时候需要post,这个其实也算计算机网络补课内容了。
我可以简单的描述一下,比如说我们注册一个用户,简单的就是发送账号密码到后台,后台存放到 数据库,并返回注册成功与否。
再比如请求小王的QQ空间动态,是发小王账号到后台,后台根据小王的账号查询数据库获取他的动态信息返回到前台的
像前者是以发送数据存储为目的,这个我们就用post,后者主要是以获取/查询数据为目的,我们就用get,另外restful里面的put,delete等等都有具体的作用,我们可以再提。
仔细分析分析你所面临的工程,你就可以知道哪个请求用get,哪个用post了,此外像get,账号密码直接跟在链接后面是很容易看到的,不安全,而刚才我们测试的post会发现,账号密码没有跟在链接后面的,而且也需要特殊的工具才能发送post,浏览器是不行的。
经过上述分析,你可以大致理解哪样的功能需要用哪样的请求方法。
不多扯了,下面再看一个重要的实现。
3. Bean映射
bean自行补课 本部分技术补充
这里越来越接近我们最后的基础项目的样子了,我们新建立一个Package,叫Entities(实体类),并且在其中建立一个名字叫UserEntity的类。
然后我们赋予它几个字段
1 | public class UserEntity { |
然后实现他的构造和getter/setter和toString方法,实现如下:
1 | public class UserEntity { |
这里千万不要手写……也不要复制我这个,你可以试试在class的大括号中按alt+insert,点击选择构造,getter,setter,或者toString各种各样的,选择之后可以生成对应字段的相应方法,或者ctrl+A全选实现全部字段的相应方法。
Idea的快捷键常用的也就那几个,多用几次就熟了。
实现之后,我们再回到我们的HelloController来看。
1 | "/beanRegister") (value = |
这样看来,我们的方法变得很简洁,beanRegister方法接受UserEntity对象,返回String,RequestMapping你更是了如指掌,不必多说。
1 | System.out.println(userEntity); |
直接打印对象会在控制台显示他的toString内容,也就是我们刚才生成的那一堆代码里的。你一会可以检验一下。
其他内容不说了,我们一直都在用这么个逻辑……快吐了!
重新运行。
由于是个默认get请求,所以打开浏览器。
1 | http://localhost:8080/beanRegister?userName=surine&passWord=123 |
我写了这样一个请求,结果如下
同理,如果我换个名字的话,
我们看一下后端控制台
两次打印的信息,可以看看是不是toString方法的内容,你也可以修改修改toString中相应的文字部分来看看。
我想你应该对Springboot有一定的理解了,好多字段,或者其他只要对应就可以访问,正如我们刚才用的url
1 | http://localhost:8080/beanRegister?userName=surine&passWord=123 |
userName和passWord字段正是我们的UserEntity里面的两个字段,这个时候你就可以举一反三了,比如你可以改一个字段名字,改一下Url,漏写一个字段字母,在UserEntity中加一个字段……各种各样的方式,肯定是有各种各样的错误,有能出现正确结果的欢迎show me,我就不一一测试了。
当然你会问,如果我的需求是用户名不必填写,在前面的实现中我们是设置require字段来配置的,这里呢?我们可以直接把UserEntity中userName字段上面加如下注解,就可以在请求中不用发送userName字段了。
1 | public class UserEntity { |
所以这种方法就很fashion,真正的工程,也基本上会是这样。所以我在本节开篇的地方说,越来越接近正式项目的样子了不是没有道理的。
对于Post我就不再多说了。改一下Method即可。
我实现的beanLogin方法如下,你可以先实现实现,再看我的。
1 | "/beanLogin",method = RequestMethod.POST) (value = |
前面的文章,包括本文章介绍了两种类型的get/post请求,还有一些别的写法就不多说了,目前这两种够我们用了,下面我们说一下返回json
3.返回Json
网络通信一般使用Json或者Xml来交换数据,而最常用的还是Json,Json是什么?Json长什么样?PS:自行补课 本部分技术补充
补完之后我们继续添加一个接口
1 | /** |
我把他叫做复读机接口,它可以传入user对象,然后返回同样的user对象,但是到前端之后就不能叫user对象了,得叫他json……
点击项目重新运行,浏览器
1 | http://localhost:8080/returnJson?userName=surine&passWord=123 |
嗯,下面这货这就是Json
对应字段和值,前端通过解析这段字符串就可以显示相应的界面,不过别着急,界面什么的都是浮云,真正的后端开发才不管什么界面不界面的。
有了正确的json就是胜利。
4.续
好像还差点啥啊?
差点啥?
Post返回Json还没写,国际惯例,小练习,需求如下
1 | 需求:前端Post发送UserEntity对象 |
然后先自己实现把,结果可以自行判断是否正确
最后,我的实现如下:
1 | "/function") (value = |
有了基础请求,相信你已经更加熟悉SpringBoot了,下面我们学习持久化部分,当掌握了持久化,你就可以直接进行项目实战了。