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 運用】

推薦閱讀