发表于: 2019-11-06 23:08:48
1 4908
今天完成的事:
1、使用postman测试post请求接口。
(1)测试留言增加接口。
正常编写的post接口测试总是报错400,请求错误。于是将其他代码都注释掉,只在入参处传递message信息,postman的填写如下,还是报错。
将@RequestBody注解删除,不传递整个message,而是将所需的变量都以键值对的形式填写在Params处,结果请求成功,数据库中成功添加信息。但是这样也不是个办法,于是就请教师兄。
原来是这里raw处填写的数据都是json数据,需要用JSONObject来接收数据,随后得知也可以用Map接收,下文有说。
这里接收json数据需要用到jar包,添加的阿里巴巴的fastjson包,依赖如下。
接收到的数据使用toString方法转为String类型再输出,或者直接输出也行,可以看到成功接收到json数据,并且可以使用get方法通过key名称获取对应的数据。
因此需要new出一个message对象,将JSONObject的get方法取出的value放入到message的set方法中,保存入数据库。
阿里的fastjson包中,使用get方法或者getString方法,object中的数据存在与否都不会报错,正常返回相应数据。
而其他的接收json数据jar包,比如net.sf.json包,使用getString方法时,如果数据为null,就会有异常抛出,如果没有捕捉异常就会报错。
阿里的jar包中方法内有非空判断,不会抛出异常。
最开始的是错误写法,无法取值。raw处的json数据格式正确写法如下。
随后又得知,message的类型除了是JSONObject,还可以是Map类型。
因为查看源码可以得知,在阿里 fastjson 的jar包里,可以看到JSONObject是继承JSON实现Map的,所以这里的msg可以写Map,也可以写JSONObject。
不管是JSONObject,还可以是Map类型,postman中的数据是一样的。
Params的键值对,是入参中使用@RequestParam绑定的变量。
headers处的格式如下,在raw编写json数据时,这里必须是application/json类型。
@RequestBody绑定的message变量,在raw编写json数据,格式如下。
成功返回状态码。
留言对应的作品id,第一次返回3,第二次没返回,默认为0。
而后又得知,入参中也可以直接写message实体类类型,这里就相当于postman传递的是个message对象。这里都了解下,看前端传递哪种方便,就可以用哪种。
这里比较方便的就是可以直接在message的set方法中填写get方法即可。
不需要new出对象,将JSONObject的value取出,再放入message的set方法中。
(2)测试作品增加接口。
这里需要注意的是因为图片上传必须要用form-data格式表单处理,所以work对象就不用加上@RequestBody,加上反而会报错。
需要的参数都在form-data格式处添加,以键值对的形式。
postman中form-data处添加相应的数据,其中因为worksId是使用@RequestParam绑定的,可以写在form-data处,也可以写在Params处。
worksId也可以写在Params处。
Headers处不需要填写任何东西。
成功插入。
其余接口都一样,这里就不放了。
了解了下form-data和raw的区别,并没有什么明确的说法,这里因为需要上传图片,只能使用form-data格式,两者都是body的部分,无法同时选择,所以在需要上传图片的接口接收参数时,只能使用form-data。其中form-data是http请求中的multipart/form-data,将表单数据处理为一条消息,以标签为单元,用分隔符分开,可以上传键值对,也可以上传文件、图片。而raw相当于一个大文本,可以上传任意格式的文本,如text、json、xml、 html等等。
2、postman的使用方法。
可设置请求方式、填写url、添加请求参数,send请求后,可以查看响应内容、状态码、时间以及响应大小。
并且可以设置接口集,将一个项目的接口都放在一个接口集内,方便查看、管理,还可以根据请求类型设置子集。
添加接口集,也就类似于收藏夹。
接口集下可以设置子集,方便管理。
3、使用nginx查看请求的响应时间。
配置nginx.conf文件,在http片段内添加如下代码,需要注意日志指定位置后的名称与log_format的名称一致。
查看响应时间的配置中,比较重要的是$upstream_addr、$upstream_response_time、$request_time、$request_body。
其中$request_body变量是由nginx自身提供,用于记录post请求日志,如果不添加该变量,日志中只会有get请求的响应数据。其余三种变量的含义如下。
$upstream_addr、$upstream_response_time、$request_time的含义如下。
且这里需要注意,因为我之前在配置中设置了nginx的反向代理,postman的url处需删去8080端口。
下图为日志中的响应数据,请求类型,以及请求IP、端口。最后面两个数据就是请求时间,第一个是upstream的响应时间,第二个就是整个请求的总时间。
明天计划的事:
1、学习mybatis的逆向工程。
2、使用AOP统一处理日志。
遇到的问题:
无
收获:
1、使用postman测试post请求接口。
了解了json数据的接收、方法入参处可用JSONObject、Map或message对象接收。其中JSONObject是继承JSON实现Map。
了解了阿里fastjson包的get方法、getString方法,object中的数据存在与否都不会报错,正常返回相应数据。
了解了图片上传用form-data格式表单处理,work对象不用加上@RequestBody,加上反而会报错。Headers处不需要填写任何东西。
了解了form-data和raw的区别,form-data是http请求中的multipart/form-data,将表单数据处理为一条消息,以标签为单元,用分隔符分开,可以上传键值对,也可以上传文件、图片。而raw相当于一个大文本,可以上传任意格式的文本,如text、json、xml、 html等等。
2、了解了postman的使用方法。
可设置请求方式、接口集、填写url、添加请求参数,查看响应内容、状态码、时间以及响应大小。
3、了解了nginx查看请求的响应时间。
配置nginx.conf文件,比较重要的是$upstream_addr、$upstream_response_time、$request_time、$request_body变量。
评论