注册 ResponseBodyHandler 到 controller 返回值处理器里,即添加自己的返回值处理器
package com.olive.config;import org.springframework.beans.factory.InitializingBean;import org.springframework.beans.factory.annotation.Autowired;import org.springframework.context.annotation.Configuration;import org.springframework.web.method.support.HandlerMethodReturnValueHandler;import org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter;import org.springframework.web.servlet.mvc.method.annotation.RequestResponseBodyMethodProcessor;import java.util.ArrayList;import java.util.List;@Configurationpublic class WebConfig implements InitializingBean {@Autowiredprivate RequestMappingHandlerAdapter adapter;@Overridepublic void afterPropertiesSet() throws Exception {List<HandlerMethodReturnValueHandler> unmodifiableList = adapter.getReturnValueHandlers();List<HandlerMethodReturnValueHandler> list = new ArrayList<>(unmodifiableList.size());for (HandlerMethodReturnValueHandler returnValueHandler : unmodifiableList) {if (returnValueHandler instanceof RequestResponseBodyMethodProcessor) {//将RequestResponseBodyMethodProcessor 实际返回值替换为自定义的,实际执行为RequestResponseBodyMethodProcessor//重要HandlerMethodReturnValueHandler handler = new ResponseBodyHandler(returnValueHandler);list.add(handler);} else {list.add(returnValueHandler);}}adapter.setReturnValueHandlers(list);}}
测试编写 Springboot 启动引导类
package com.olive;import org.springframework.boot.SpringApplication;import org.springframework.boot.autoconfigure.SpringBootApplication;/** * https://cloud.tencent.com/developer/article/1616704 * * @author 2230 * */@SpringBootApplicationpublic class Application {public static void main(String[] args) {SpringApplication.run(Application.class);}}
编写测试 Controller
package com.olive.controller;import java.util.HashMap;import java.util.Map;import com.olive.annotation.Encrypted;import com.olive.dto.ResultInfo;import org.springframework.web.bind.annotation.RequestMapping;import org.springframework.web.bind.annotation.RestController;@RestControllerpublic class TestController { @Encrypted @RequestMapping("/reqBody") public ResultInfo<Map<String, Object>> reqBody(){ResultInfo<Map<String, Object>> resultInfo = new ResultInfo<>();resultInfo.setCode(200);resultInfo.setMessage("success");Map<String, Object> map = new HashMap<>();map.put("userId", 100);map.put("tenantId", 1001);map.put("userName", "bug弄潮儿");resultInfo.setBody(map);return resultInfo; }}
通过 HandlerMethodReturnValueHandler 可以对返回的数据进行进一步的封装,减少在业务代码中进行重复的返回值处理 。例如 , 文章中的对返回数据进行统一加密 。
【Springboot 之 HandlerMethodReturnValueHandler 运用】
推荐阅读
- 哲仁王后女主后来回来了吗_哲仁王后女主之后有没有回来
- 分布式存储系统之Ceph基础
- 二 Java之POI导出Excel:多个sheet
- 光与夜之恋双十一礼包怎么购买
- 光与夜之恋钜惠嘉年华怎么买划算
- 永恒岛之彩虹世界日常必做任务有哪些
- 永恒岛之彩虹世界哪些宠物强度高
- 「产品运营」研发效能之DevOps平台如何运营?
- springboot自动配置原理以及手动实现配置类
- 云顶之弈护卫赛娜怎么玩