发表于: 2018-03-14 20:36:33
1 538
今天完成的事情:
早上学习了一下关于@responsebody注解。
****************************************************************************************
配合@ResponseBody注解,以及HTTP Request Header中的Accept属性,Controller返回的Java对象可以自动被转换成对应的XML或者JSON数据。
@responsebody表示该方法的返回结果直接写入HTTP response body中。
它的使用情况如下:
1、一般在异步获取数据时使用,在使用@RequestMapping后,返回值通常解析为跳转路径,加上@responsebody后返回结果不会被解析为跳转路径,而是直接写入HTTP response body中。比如异步获取json数据,加上@responsebody后,会直接返回json数据。
2、一般是指定要response 的type。比如json 或 xml 可以直接用jackson或jaxb的包,然后就可以自动返回了,xml中也无需多的配置,就可以使用。
好处是:GET模式下,这里使用了@PathVariable绑定输入参数,非常适合Restful风格。因为隐藏了参数与路径的关系,可以提升网站的安全性,静态化页面,降低恶意攻击风险。
POST模式下,使用@RequestBody绑定请求对象,Spring会帮你进行协议转换,将Json、Xml协议转换成你需要的对象。
@ResponseBody可以标注任何对象,由Srping完成对象——协议的转换。
坏处是:返回之前,若前端编码格式不一致,很容易导致乱码。
**************************************************************************************************
首先,先建立一个简单的javabean,然后在上面加上下面的注解和引入。
import javax.xml.bind.annotation.XmlRootElement;
@XmlRootElement
然后,在控制器中编写如下代码:
@RequestMapping(value = "/xml/{name}", method = RequestMethod.GET)
@ResponseBody
public User getEmployeeXml(@PathVariable String name) {
return new User(name,"男","1600");
}
或者:
@RequestMapping(value = "/xml/{name}", method = RequestMethod.GET)
@ResponseBody
public User getEmployeeXml(@PathVariable String name) {
User user = new User();
user.setName("方展");
user.setSex("男");
user.setAge("25");
return user;
}
返回结果如下:
.png)
.png)


***************************************************************************************************
然后大致了解了一下Json的taglib的json转化,其实相对也没有多难,只是我一直理解错了:
师兄告诉我,前端获取到的json就是这样的:
.png)

前端接收到的数据就是json:object。然后查了一下关于前端如如何渲染json,看到一个霸气十足的回到:操作dom,塞到指定的位置去。
************************************************************************************************
明天计划的事情:
************************************************************************************************
遇到的问题:
1.在给控制器的方法加上@ResponseBody后,程序返回的不再是期待的页面。
这是首页welcome:
.png)

这是网页返回的页面:
.png)

测试几遍之后,系统是将return后面的字符串传递出来了,而不是传递过来一个页面。
然后我测试了一下java的类,原本加上@XmlRootElement注解,返回的是上图那样的XML形式的数据。
但去掉注解,单纯的使用@ResponseBody注解的话,程序返回的值就会变成这样:
.png)

重复几次测试以后,程序会执行
@RequestMapping(value = "/xml/{name}", method = RequestMethod.GET)
后的方法,然后将方法return的值转化成对应的JSON数据格式,然后返回给前端。而不会返回一个页面给浏览器。
后的方法,然后将方法return的值转化成对应的JSON数据格式,然后返回给前端。而不会返回一个页面给浏览器。
2.在读取页面的时候,缓存中只存在一条数据,然后后端就只返回一条数据。清空了缓存以后,重新读取数据库是存在三条数据的。
不明白为什么会出现那种状况,那么如何避免这种状态再次出现呢?
重新更改了逻辑判断list长度是否匹配数据库数据长度,经测试,算是一定程度上避免了这种状况的发生:
.png)

返回的数据是:
.png)

控制台输出:
.png)

收获:
1.学会了@ResponseBody的用法。
进度:
任务开始时间:2018年02月08日
预计demo时间:2017年03月15日
禅道:http://task.ptteng.com/zentao/project-task-490.html
评论