Springboot 之 HandlerMethodReturnValueHandler 运用( 二 )

注册 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 运用】

推荐阅读