0
点赞
收藏
分享

微信扫一扫

Spring Boot @EnableWebMvc 配置Long类型精度丢失, supportedMediaType 支持,addResourceHandlers配置;添加拦截器

Star英 2022-06-09 阅读 50
import com.fasterxml.jackson.databind.ObjectMapper;
import com.fasterxml.jackson.databind.module.SimpleModule;
import com.fasterxml.jackson.databind.ser.std.ToStringSerializer;
import org.springframework.context.annotation.Configuration;
import org.springframework.http.MediaType;
import org.springframework.http.converter.HttpMessageConverter;
import org.springframework.http.converter.json.MappingJackson2HttpMessageConverter;
import org.springframework.web.servlet.config.annotation.EnableWebMvc;
import org.springframework.web.servlet.config.annotation.InterceptorRegistry;
import org.springframework.web.servlet.config.annotation.ResourceHandlerRegistry;
import org.springframework.web.servlet.config.annotation.*;

import java.nio.charset.StandardCharsets;
import java.util.ArrayList;
import java.util.List;

/**
* @author: Jack
* 2020-08-14 18:53
*/
@Configuration
@EnableWebMvc
public class WebConfig extends WebMvcConfigurerAdapter {
@Override
public void configureMessageConverters(List<HttpMessageConverter<?>> converters) {
MappingJackson2HttpMessageConverter jackson2HttpMessageConverter = new MappingJackson2HttpMessageConverter();
ObjectMapper objectMapper = new ObjectMapper();
/**
* 序列换成json时,将所有的long变成string, 因为js中得数字类型不能包含所有的java long值.
* 参考文章:
*/
SimpleModule simpleModule = new SimpleModule();
simpleModule.addSerializer(Long.class, ToStringSerializer.instance);
simpleModule.addSerializer(Long.TYPE, ToStringSerializer.instance);
objectMapper.registerModule(simpleModule);
jackson2HttpMessageConverter.setObjectMapper(objectMapper);

// supportedMediaTypes
List<MediaType> supportedMediaTypes = new ArrayList<>(jackson2HttpMessageConverter.getSupportedMediaTypes());
supportedMediaTypes.add(MediaType.APPLICATION_JSON_UTF8);
supportedMediaTypes.add(MediaType.TEXT_HTML);
supportedMediaTypes.add(new MediaType("application", "*+json", StandardCharsets.UTF_8));
jackson2HttpMessageConverter.setSupportedMediaTypes(supportedMediaTypes);

converters.add(jackson2HttpMessageConverter);
}


@Override
public void addResourceHandlers(ResourceHandlerRegistry registry) {

// Spring Boot自动配置本身不会自动把/swagger-ui.html这个路径映射到对应的目录META-INF/resources/下面。
// 这个swagger-ui.html 相关的所有前端静态文件都在springfox-swagger-ui.jar里面。
registry.addResourceHandler("swagger-ui.html")
.addResourceLocations("classpath:/META-INF/resources/");

registry.addResourceHandler("/webjars/**")
.addResourceLocations("classpath:/META-INF/resources/webjars/");
}

@Override
public void addInterceptors(InterceptorRegistry registry) {
// 多个拦截器组成一个拦截器链
// addPathPatterns 用于添加拦截规则
// excludePathPatterns 用户排除拦截

//添加拦截器
registry.addInterceptor(new CheckpreloadInterceptor());

super.addInterceptors(registry);
}


}

其中,CheckpreloadInterceptor 代码是:

import org.apache.commons.lang3.StringUtils;
import org.springframework.web.servlet.HandlerInterceptor;
import org.springframework.web.servlet.ModelAndView;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

/**
* 处理 checkpreload.htm 白名单过滤
*
* @author: Jack
* 2020-08-17 15:11
*/
public class CheckpreloadInterceptor implements HandlerInterceptor {

/**
* 访问controller之前被调用
*
* @param request
* @param response
* @param handler
* @return
*/
@Override
public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) {
// 跳过status.taobao和checkpreload检测
String requestURL = request.getRequestURI();
if (StringUtils.contains(requestURL, "status.taobao") || StringUtils.contains(requestURL, "checkpreload.htm")) {
return true;
}

return true;
}

/**
* 访问controller之后 访问视图之前被调用
*
* @param request
* @param response
* @param handler
* @param modelAndView
*/
@Override
public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) {

}

/**
* 访问视图之后被调用
*
* @param request
* @param response
* @param handler
* @param ex
*/
@Override
public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) {

}
}


举报

相关推荐

0 条评论