• 0219 springmvc-拦截器和响应增强


    拦截器

    拦截器分同步拦截器和异步拦截器;

    HandlerInterceptor

    方法和执行时机

    可以看DispathcerServlet的原来确定它的三个方法的执行时机;

    AsynHandlerInterceptor

    看注释,主要用来清理在并发环境加清理ThreadLocal的数据;

    ResponseBodyAdvice

    对返回值备注了@ResponseBody或者返回ResponseEntity做了一些加工;

    会在使用消息转换器转换为json数据之前进行数据转换输出;

    package com.springbootpractice.interceptor.config;
    
    import com.fasterxml.jackson.core.JsonProcessingException;
    import com.fasterxml.jackson.databind.ObjectMapper;
    import com.springbootpractice.interceptor.config.interceptor.MyInterceptor;
    import lombok.SneakyThrows;
    import org.springframework.context.annotation.Configuration;
    import org.springframework.core.MethodParameter;
    import org.springframework.http.HttpStatus;
    import org.springframework.http.MediaType;
    import org.springframework.http.ResponseEntity;
    import org.springframework.http.server.ServerHttpRequest;
    import org.springframework.http.server.ServerHttpResponse;
    import org.springframework.web.bind.annotation.ControllerAdvice;
    import org.springframework.web.servlet.HandlerInterceptor;
    import org.springframework.web.servlet.config.annotation.InterceptorRegistry;
    import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;
    import org.springframework.web.servlet.mvc.method.annotation.ResponseBodyAdvice;
    
    import java.util.HashMap;
    import java.util.Map;
    
    /**
     * 说明:配置拦截器和设置统一返回格式
     * @author carter
     * 创建时间: 2020年02月19日 11:03 下午
     **/
    @Configuration
    @ControllerAdvice
    public class WebConfig implements WebMvcConfigurer, ResponseBodyAdvice {
    
        @Override
        public void addInterceptors(InterceptorRegistry registry) {
            HandlerInterceptor myIntercepter = new MyInterceptor() ;
            registry.addInterceptor(myIntercepter).addPathPatterns("/**");
        }
    
        @Override
        public boolean supports(MethodParameter returnType, Class converterType) {
            return true;
        }
    
        @SneakyThrows
        @Override
        public Object beforeBodyWrite(Object body, MethodParameter returnType, MediaType selectedContentType, Class selectedConverterType, ServerHttpRequest request, ServerHttpResponse response) {
    
           Map<String,Object> map = new HashMap();
           map.put("result","true");
           map.put("data",body);
           return new ObjectMapper().writeValueAsString(map);
        }
    }
    
    

    小结

    image.png

    通过本小节,你可以学到:

    1. 如何配置拦截器,打印每个http接口的耗时;
    2. 如何设置接口的统一返回格式;

    image.png

    代码点我获取!

    原创不易,转载请注明出处。

  • 相关阅读:
    【原创】VNC-view配置
    【LVM】LVM自动扩容脚本
    【linux磁盘分区--格式化】fdisk,parted,mkfs.ext3
    【原】Centos 7 下创建LVM流程
    【Spring-AOP-学习笔记-7】@Around增强处理简单示例
    【转】libvirt kvm 虚拟机上网 – Bridge桥接
    【phantomjs】使用phantomjs生成highChart的图片(待完善)
    【Redis】使用Redis Sentinel实现Redis HA
    【Redis】配置redis主从复制
    【转载】优秀博文转载
  • 原文地址:https://www.cnblogs.com/snidget/p/12333933.html
Copyright © 2020-2023  润新知