Interceptor
Interceptor interceptor synchronous and asynchronous sub-interceptor;
HandlerInterceptor
The method and timing of execution
You can see the original DispathcerServlet determine the timing of the implementation of its three methods;
AsynHandlerInterceptor
See comments, mainly used to clean up the data in a concurrent environment plus clean up the ThreadLocal;
ResponseBodyAdvice
Note the @ResponseBody return value or return ResponseEntity do some processing;
Data conversion will be output before the message is converted into json data converter;
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);
}
}
summary
After completing this section, you can learn:
- How to configure interceptors, each print takes http interface;
- How to set up a unified interface return form;
The original is not easy, please indicate the source.