采纳答案成功!
向帮助你的同学说点啥吧!感谢那些助人为乐的人
老师,我有几个疑问
ServiceResponse是自己实现了json序列化,二期课程中设置了jsonutil,采用了通用的json序列和反序列的方法来对所有对象进行序列化和反序列化,是吗?
在拦截器一章,当输出流的格式设置为json时,serviceresponse 为什么还要进行一次json序列化?
json序列化和通常讲的Serializable有什么区别?
你好,亲爱的同学,首先要赞一下聪聪 特别棒,良好的思考习惯!
在一期的时候,是通过springmvc的jackson插件来控制的,在springmvc的配置文件中可以看到
因为通过拦截器拦截上之后,就不再走mappingjackson啦,需要自己来序列化,达到同样的效果,这样对于前端来说是0感知。前端不必之后咱们后端的数据怎么处理的,和之前的接口定义一致即可。
都是一个方式,传统的是序列化成字节,业务场景上经常这么说,当然也可以说xml序列化,当然现在用xml的越来越少,因为它占用了更多的字节和数据内容。
@聪聪同学~~~ protostuff扩展的非常好~~
非常感谢!
你好同学,希望我的答案能够对你有帮助。
问题一,ServiceResponse只是一个通用的返回封装,我们在前端调用时,所有的接口都采用这种格式进行返回。但是jsonUtil是将我们需要存储的用户实体进行序列化成json存储在redis当中。读取数据时又将redis当中String类型json进行反序列化成User实体。一个为前端调用返回json.一个为对象转json存储redis
问题三,Serializable是java当中序列化,虽然也称之为序列化,通常使用在java网络传输、流传输当中。将对象写入到临时存储或者是持久存储当中。然后这里的json序列化指的是(将实体对象转换成对应的json字符串)同时存储在redis当中。
对于问题三补充:老师使用的是将对象序列化成json字符串,还可以通过protostuff将其序列化,获取时再反序列化
public String putSeckill(Seckill seckill) { // set Object(Seckill) => 序列化 =》byte[] try{ Jedis jedis = jedisPool.getResource(); try{ String key = "seckill:"+seckill.getSeckillId(); byte[] bytes = ProtostuffIOUtil.toByteArray(seckill,schema, LinkedBuffer.allocate(LinkedBuffer.DEFAULT_BUFFER_SIZE)); //缓存超时 int timeout = 60 * 60; String result = jedis.setex(key.getBytes(),timeout,bytes); return result; }finally { jedis.close(); } }catch (Exception e){ logger.error(e.getMessage(),e); } return null; }
第二个问题,我的理解是 serviceresponse 只是返回json字符串 拦截器是将http请求的response返回类型设置成json 呃(⊙o⊙)… 我也有点乱 ,此处应该@Geely 嘿嘿嘿
谢谢同学,这么耐心,我们这个项目当中,实际上Serviceresponse没有用到json功能,它只是用来给前端进行展示,当用在应用程序之间进行网络传递,放到文本进行持久化,才是用到的这个json字节流吧?所以我们这里应该是一个后期扩展用的Servicresponse,只是这里对于拦截器的输出设置实在不明白,有何用??
赞一下聪聪同学!!
统一和前端开发约定的格式啊 前端需要解析json 判断我们返回的数据
好问题,我也想知道
登录后可查看更多问答,登录/注册
Tomcat集群+Redis分布式+代码重构+源码原理解析
2.0k 17
3.0k 12
2.0k 12
2.0k 11
2.3k 10
购课补贴联系客服咨询优惠详情
慕课网APP您的移动学习伙伴
扫描二维码关注慕课网微信公众号