请稍等 ...
×

采纳答案成功!

向帮助你的同学说点啥吧!感谢那些助人为乐的人

ServiceResponse序列化

老师,我有几个疑问

  1. ServiceResponse是自己实现了json序列化,二期课程中设置了jsonutil,采用了通用的json序列和反序列的方法来对所有对象进行序列化和反序列化,是吗?

  2. 在拦截器一章,当输出流的格式设置为json时,serviceresponse 为什么还要进行一次json序列化?

  3. json序列化和通常讲的Serializable有什么区别?

    https://img1.sycdn.imooc.com//szimg/5aa89ba50001fbd107170195.jpg

正在回答

插入代码

3回答

Geely 2018-03-17 18:44:53

你好,亲爱的同学,首先要赞一下聪聪 特别棒,良好的思考习惯!

  1. 在一期的时候,是通过springmvc的jackson插件来控制的,在springmvc的配置文件中可以看到

    https://img1.sycdn.imooc.com//szimg/5aacf1890001230e10760216.jpg

  2. 因为通过拦截器拦截上之后,就不再走mappingjackson啦,需要自己来序列化,达到同样的效果,这样对于前端来说是0感知。前端不必之后咱们后端的数据怎么处理的,和之前的接口定义一致即可。


  3. 都是一个方式,传统的是序列化成字节,业务场景上经常这么说,当然也可以说xml序列化,当然现在用xml的越来越少,因为它占用了更多的字节和数据内容。


@聪聪同学~~~ protostuff扩展的非常好~~



2 回复 有任何疑惑可以回复我~
聪聪不匆匆 2018-03-14 23:22:11

你好同学,希望我的答案能够对你有帮助。

  • 问题一,ServiceResponse只是一个通用的返回封装,我们在前端调用时,所有的接口都采用这种格式进行返回。但是jsonUtil是将我们需要存储的用户实体进行序列化成json存储在redis当中。读取数据时又将redis当中String类型json进行反序列化成User实体。一个为前端调用返回json.一个为对象转json存储redis

  • 问题三,Serializable是java当中序列化,虽然也称之为序列化,通常使用在java网络传输、流传输当中。将对象写入到临时存储或者是持久存储当中。然后这里的json序列化指的是(将实体对象转换成对应的json字符串)同时存储在redis当中。

    对于问题三补充:老师使用的是将对象序列化成json字符串,还可以通过protostuff将其序列化,获取时再反序列化

  • 1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    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 嘿嘿嘿

3 回复 有任何疑惑可以回复我~
  • 提问者 qq_追梦青年_1 #1
    谢谢同学,这么耐心,我们这个项目当中,实际上Serviceresponse没有用到json功能,它只是用来给前端进行展示,当用在应用程序之间进行网络传递,放到文本进行持久化,才是用到的这个json字节流吧?所以我们这里应该是一个后期扩展用的Servicresponse,只是这里对于拦截器的输出设置实在不明白,有何用??
    回复 有任何疑惑可以回复我~ 2018-03-15 10:39:57
  • Geely #2
    赞一下聪聪同学!!
    回复 有任何疑惑可以回复我~ 2018-03-17 18:43:56
  • about_blank 回复 提问者 qq_追梦青年_1 #3
    统一和前端开发约定的格式啊 前端需要解析json 判断我们返回的数据
    回复 有任何疑惑可以回复我~ 2018-03-19 22:40:22
李兴杰 2018-03-14 16:41:56

好问题,我也想知道

0 回复 有任何疑惑可以回复我~
问题已解决,确定采纳
还有疑问,暂不采纳
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号