实际项目中,后台接口返回的内容是要加密的
(我们可以在每个接口返回前手动加密、返回,这样总觉得不爽)
Spring的MessageConverter正是用于转换数据(输入、输出)的
所以,可以通过自定义一个MessageConverter,比较简洁地实现这个需求。
1. 为了最小的影响框架的功能,复用Jackson的Converter
【AbstractJackson2HttpMessageConverter】
【MappingJackson2HttpMessageConverter】
其中,【 protected void writeInternal】是往Response输出内容。
2. 修改
AbstractJackson2HttpMessageConverter#writeInternal
// this.objectMapper.writeValue(generator, result); String str = objectMapper.writeValueAsString(result); // ① 转换成JSON格式字符串 String str2 = encrypt(str) // ② 加密返回值 outputMessage.getBody().write(str.getBytes()); // ③ 输出到Response
说明
1. 用Spring框架的话,返回值自然是一个统一的ResultVO
2. 基于上面这点,从抽象类【AbstractJackson2HttpMessageConverter】冲去掉了【implements GenericHttpMessageConverter<Object>】,
顺次删除【canWrite】【canRead】等。
3. 修改AbstractJackson2HttpMessageConverter#supports
@Override protected boolean supports(Class<?> clazz) { return ResultVO.class.isAssignableFrom(clazz); }