1、引言
在SpringMVC的使用中,后端与前端的交互一般是使用Json格式进行数据传输,SpringMVC的@ResponseBody注解可以很好的帮助我们进行转换,但是后端返回数据给前端往往都有约定固定的格式,这时候我们在后端返回的时候都要组拼成固定的格式,每次重复的操作非常麻烦。
2、SpringMVC对@ResponseBody的处理
SpringMVC处理@ResponseBody注解声明的Controller是使用默认的.RequestResponseBodyMethodProcessor类来实现,RequestResponseBodyMethodProcessor类实现了HandlerMethodReturnValueHandler接口并实现了接口中的supportsReturnType()和handleReturnValue()方法。
/* * Copyright 2002-2017 the original author or authors. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://ponent.handler.ResultWarpReturnValueHandler;import org.springframework.beans.factory.InitializingBean;import org.springframework.beans.factory.annotation.Autowired;import org.springframework.cache.annotation.EnableCaching;import org.springframework.context.annotation.Configuration;import org.springframework.web.method.support.HandlerMethodReturnValueHandler;import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;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;import lombok.extern.slf4j.Slf4j;/** * 替换默认的RequestResponseBodyMethodProcessor * @Author Autumn、 * @Date 2019/4/8 23:46 * @Description */@Slf4j@Configuration@EnableCachingpublic class ApplicationContext implements WebMvcConfigurer, InitializingBean { @Autowired(required = false) private RequestMappingHandlerAdapter adapter; @Override public void afterPropertiesSet() throws Exception { // 获取SpringMvc的ReturnValueHandlers List<HandlerMethodReturnValueHandler> returnValueHandlers = adapter.getReturnValueHandlers(); // 新建一个List来保存替换后的Handler的List List<HandlerMethodReturnValueHandler> handlers = new ArrayList<>(returnValueHandlers); // 循环遍历找出RequestResponseBodyMethodProcessor for (HandlerMethodReturnValueHandler handler : handlers) { if (handler instanceof RequestResponseBodyMethodProcessor) { // 创建定制的Json格式处理Handler ResultWarpReturnValueHandler decorator = new ResultWarpReturnValueHandler(handler); // 使用定制的Json格式处理Handler替换原有的RequestResponseBodyMethodProcessor int index = handlers.indexOf(handler); handlers.set(index, decorator); break; } } // 重新设置SpringMVC的ReturnValueHandlers adapter.setReturnValueHandlers(handlers); }}
5、总结
至此完成了定制@ResponseBody注解返回的Json格式,在Controller中返回任何的字符串都可以定制成为我们想要的Json格式。此外SpringMVC还提供了非常多的Handler接口来进行Controller的增强,可以使用此思路对参数等进行定制化。
到此这篇关于详解SpringBoot定制@ResponseBody注解返回的Json格式的文章就介绍到这了,更多相关SpringBoot @ResponseBody返回Json内容请搜索以前的文章或继续浏览下面的相关文章希望大家以后多多支持!