上节课我们学到了

使用了@RequestBody注解。在请求的时候我们就可以得到传入的字符串
并且在我们的配置文件中写上了RequestMappingHandlerAdapter并且配合了defaultCharset设置 可以使我们返回的内容加上字符编码
添加配置如下

接下来看下这节课内容
比如我们在请求的时候 除了请求字符串 我们会请求表单形式的内容或者json形式的内容
首先我们学下表单请求
为了演示
我修改下包的目录层级
java源码目录下创建个com.jtthink包
com.jtthink包下创建个controllers和Entities包
目录如下

首先在Entities包下创建个NewsInfo实体类
里面包含了news_title和news_author字段 生成了get和set方法
里面重写了toString方法

当我们在代码里传入这个实体时 就可以把这个对象按照我们的格式输出出来
NewsController代码如下

重新发布下代码
由于我们规定的是POST请求方式 所以我们用火狐带的插件测试下(RESter插件)
由于我们是表单提交 还要改下
Content-Type 设置为application/x-www-form-urlencoded


提交结果如下

可以看出显示的内容和我们实体里重写的toStirng方法是一样的
但是上面还多出了一堆信息

这些内容可以禁止显示
在context-spring.xml中

重新发布下代码
再次用火狐插件请求 显示结果如下

可以看出显示一堆内容被禁掉了
以上就是表单提交的方式 获取内容(通常在MVC的view层使用)
下面我们学下JSON怎么做?(做restful api时用)

来到https://docs.spring.io/spring/docs/5.0.1.BUILD-SNAPSHOT//spring-framework-reference/web.html#mvc-ann-requestbody官网

首先在方法参数中加入@RequestBody注解 其内部已经有一个JSON和xml相关的转换器进行转换
其中Gson可以对我们json对象或字符串进行转化
下面配置一下
打开context-spring.xml
我们上节课配置了一个StringHttpMessageConverter转换器
所以这节课还要来个bean

下一步就是如何引用这个bean了

上节课的这个地方支持配置多个
官方实例如下

我们修改添加如下

注释掉了只有一个的情况 新加了一个
接下来还需要在pom.xml中加入gson依赖
<dependency>
<groupId>com.google.code.gson</groupId>
<artifactId>gson</artifactId>
<version>2.8.0</version>
</dependency>
这样配置好了以后 我们在NewsController中的addnews方法就可以json方式请求
NewsController中addnews方法必须要有注解参数@RequestBody
代码如下

重新发布下代码
接着用火狐自带的插件测试下
首先将header的content-type设置为如下

请求body

点击send结果如下

以上就是我们可以把json格式内容进行提交
接下来学习下自定义接受头,有什么作用呢 (我们在做api时,除了加入相关token或者加密字符串请求身份验证,也会加入一些版本的限制 比如在头部加入版本的限制 1.0版本就抛出1.0版本的内容 2.0就抛出2.0版本内容)

下面我们演示下
同一个api地址 我们加入头可以返回不同的内容(用到@PostMapping 里面有个header设置)
NewsController代码

重新发布一下
再次用火狐的RESTfer请求

报错了
因为我们没有加入请求头信息
下面添加头信息author=bhc如下

再次点击send

可以发现成功请求了
如果请求头写入author=bhcqqq 不为bhc请求还是报错的

下面写下如果请求头有多个写法

重新发布
再次用火狐插件请求
我们首先只填入请求头author=bhc

可以发现请求还是失败的
再加入请求头version=1.0

请求成功了
以上就是自定义头信息的基本设置
官方有更多的实例https://docs.spring.io/spring/docs/5.0.4.RELEASE/spring-framework-reference/web.html#mvc-ann-requestparam
最后我们学下返回JSON(我们上面返回的内容都为字符串,我们在做api时肯定返回的是一些通用的格式即JSON)

下面我们首先在Entities包下面创建个JSONResult类
随便写两个属性message和date 并生成set和get 构造函数
如下

接下来修改下NewsController里面的addnews方法

重新发布一下代码
接下来用火狐插件测试下

可以发现我们返回了想要的JSON格式数据
后面我们会学习如何将MVC中的V 并且做较为纯净的restful api
网友评论