ServiceResponse序列化
来源:10-7 SpringMVC拦截器实战-4:解决拦截登录循环
qq_追梦青年_1
2018-03-14
老师,我有几个疑问
ServiceResponse是自己实现了json序列化,二期课程中设置了jsonutil,采用了通用的json序列和反序列的方法来对所有对象进行序列化和反序列化,是吗?
在拦截器一章,当输出流的格式设置为json时,serviceresponse 为什么还要进行一次json序列化?
json序列化和通常讲的Serializable有什么区别?
3回答
-
你好,亲爱的同学,首先要赞一下聪聪 特别棒,良好的思考习惯!
在一期的时候,是通过springmvc的jackson插件来控制的,在springmvc的配置文件中可以看到
因为通过拦截器拦截上之后,就不再走mappingjackson啦,需要自己来序列化,达到同样的效果,这样对于前端来说是0感知。前端不必之后咱们后端的数据怎么处理的,和之前的接口定义一致即可。
都是一个方式,传统的是序列化成字节,业务场景上经常这么说,当然也可以说xml序列化,当然现在用xml的越来越少,因为它占用了更多的字节和数据内容。
@聪聪同学~~~ protostuff扩展的非常好~~
212018-03-26 -
聪聪不匆匆
2018-03-14
你好同学,希望我的答案能够对你有帮助。
问题一,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 嘿嘿嘿
342018-03-19 -
李兴杰
2018-03-14
好问题,我也想知道
00
相似问题