美文网首页Java学习笔记
SpringMVC中统一修改返回值JSON的格式处理

SpringMVC中统一修改返回值JSON的格式处理

作者: 想象之中丶意料之外 | 来源:发表于2021-12-29 17:31 被阅读0次
  • SpringMVC 4.1支持ResponseBodyAdvice接口【网上看到说的】
  • 通过@ControllerAdvice注解 + ResponseBodyAdvice接口实现

实现步骤

  1. 先定义统一返回类JsonReturn
@Data
public class JsonReturn {
    private int code;
    private String msg = "";
    private Object result = null;
}
  1. 自定义类,实现ResponseBodyAdvice接口中的方法。在方法中,完成逻辑处理
  2. 给自定义类,加上 @ControllerAdvice 完成所有Controller类增强功能【@ControllerAdvice注解:SpringMVC 中 @ControllerAdvice 注解的三种使用场景!

/**
 * 通过 @ControllerAdvice + 实现 ResponseBodyAdvice 接口。
 * 完成 统一返回结果处理
 */
@ControllerAdvice
public class ReturnJsonResponseBodyAdvice implements ResponseBodyAdvice<Object> {
    /**
     * 是否支持 该 返回体 通知器
     * true:表示支持
     */
    @Override
    public boolean supports(MethodParameter returnType, Class<? extends HttpMessageConverter<?>> converterType) {
        /**
         * 如果走的是 FastJsonHttpMessageConverter 消息转换器,
         * 则MyResponseBody 通知器,来完成完成统一JSON格式返回
         */
        Class<FastJsonHttpMessageConverter> aClass = FastJsonHttpMessageConverter.class;

        // 获取 Controller中方法上的 @ResponseBody注解
        ResponseBody isMethodResponseBody = returnType.getMethodAnnotation(ResponseBody.class);
        Class<?> cClass = returnType.getContainingClass();
        // 判断Controller类中是否包含 @RestController 注解
        boolean isRestController = cClass.isAnnotationPresent(RestController.class);
        // 判断Controller类中是否包含 @ResponseBody注解
        boolean isResponseBody = cClass.isAnnotationPresent(ResponseBody.class);

        /**
         * 如果:1、走的是FastJsonHttpMessageConverter消息转换器
         * 或 Controller类上有@ResponseBody注解
         * 或 Controller类上有 @RestController注解
         * 或 Controller中的方法上有 @ResponseBody注解
         * 则:该 ResponseBody通知器主持
         */
        if (converterType == aClass || isResponseBody || isRestController || null != isMethodResponseBody) {
            System.out.println("走的是 FastJsonHttpMessageConverter 转换器");
            return true;
        }
        return false;
    }

    @Override
    public Object beforeBodyWrite(Object body, MethodParameter returnType, MediaType selectedContentType, Class<? extends HttpMessageConverter<?>> selectedConverterType, ServerHttpRequest request, ServerHttpResponse response) {
        /**
         * 将需要返回的实际结果,
         * 设置到统一返回格式对象的result属性中
         */
        if (body instanceof JsonReturn) {
            return body;
        } else {
            JsonReturn jsonReturn = new JsonReturn();
            jsonReturn.setResult(body);
            return jsonReturn;
        }
    }
}

  • 以上方案,在 spring-webmvc 5.2.18.RELEASE上测试通过

相关文章

  • SpringMVC中统一修改返回值JSON的格式处理

    SpringMVC 4.1支持ResponseBodyAdvice接口【网上看到说的】 通过@Controller...

  • centos安装jshon

    用Shell查询数据,返回值要转换成Json格式。而在bash中的json处理json.org推荐了两种jshon...

  • QQ空间音乐免费API接口说明

    这个接口是以JSON和XML做返回值处理的,默认为返回JSON。 API接口返回值为JSON: 返回为 JSON ...

  • JavaScript数组方法及json

    一、json数据格式及json语法 一个简单的json 将数组改为json json的访问/读取格式 修改则直接赋...

  • 初见SpringMVC之json交互

    初见SpringMVC之json交互 JSON数据是一种存储数据的格式,前后台之间通过json数据进行交互是非常常...

  • 前端JSON请求统一校验

    一、ParamCheckValidate 参数验证 此例是通过SpringMVC从前台获取Map格式的json后,...

  • 递归脱敏

    说明 对特定类型的返回值进行深度递归处理List > 或 Map 或是可以将JSON字符串转成对应的格式类型 递...

  • kettle json处理

    Kettl处理JSON文件 Kettle处理JSON文件的文件格式,必须包含“[]”,否则不会成功; 第一种格式(...

  • golang 网络编程(10)文本处理

    Json 处理 现在大部分我们从服务端获取数据都是Json 格式,所以对 json 格式数据处理在 web 应用开...

  • 关于springMVC 接口测试

    此文是基于 springmvc 最简配置-处理json数据 基础上进行测试的,springMVC 可以直接将数据封...

网友评论

    本文标题:SpringMVC中统一修改返回值JSON的格式处理

    本文链接:https://www.haomeiwen.com/subject/wezvqrtx.html