文档章节

SpringBoot笔记7:WebMvcConfigurerAdapter 常用配置

HGMrWang
 HGMrWang
发布于 2017/08/21 18:45
字数 307
阅读 53
收藏 2
@Component
@Configuration
public class WebConfig extends WebMvcConfigurerAdapter {

    Logger logger= LoggerFactory.getLogger(this.getClass());


    //使用阿里 FastJson 作为JSON MessageConverter
    @Override
    public void configureMessageConverters(List<HttpMessageConverter<?>> converters) {
        FastJsonHttpMessageConverter4 converter = new FastJsonHttpMessageConverter4();
        FastJsonConfig config = new FastJsonConfig();
        config.setSerializerFeatures(SerializerFeature.WriteMapNullValue,//保留空的字段
                SerializerFeature.WriteNullStringAsEmpty,//String null -> ""
                SerializerFeature.WriteNullNumberAsZero);//Number null -> 0
        converter.setFastJsonConfig(config);
        converter.setDefaultCharset(Charset.forName("UTF-8"));
        converters.add(converter);
    }

    //注册自定义的拦截器
    @Override
    public void addInterceptors(InterceptorRegistry registry) {
        super.addInterceptors(registry);
    }

    //处理业务抛出的异常 在这里进行统一处理
    @Override
    public void configureHandlerExceptionResolvers(List<HandlerExceptionResolver> exceptionResolvers) {
        super.configureHandlerExceptionResolvers(exceptionResolvers);
        exceptionResolvers.add((httpServletRequest, response, o, e) -> {
            ResultData result=null;
            if (e instanceof BusinessException){
                result= ResultData.makeFailResult(e.getMessage());
                logger.error(e.getMessage());
                e.printStackTrace();
            }

            if (e instanceof ApiAutheException){
                result=ResultData.makeFailResult(-1,e.getMessage());
                e.printStackTrace();
                logger.error(e.getMessage());
            }

            writeResult(response,result);

            return new ModelAndView();
        });
    }


    //请求跨域
    @Override
    public void addCorsMappings(CorsRegistry registry) {

        registry.addMapping("/**")
                .allowedOrigins(CorsConfiguration.ALL)
                .allowedMethods("GET", "HEAD", "POST","PUT", "DELETE", "OPTIONS");
        super.addCorsMappings(registry);
    }

    //获取客户端的ip
    private String getClientIpAddress(HttpServletRequest request) {
        String ip = request.getHeader("x-forwarded-for");
        if (ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) {
            ip = request.getHeader("Proxy-Client-IP");
        }
        if (ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) {
            ip = request.getHeader("WL-Proxy-Client-IP");
        }
        if (ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) {
            ip = request.getHeader("HTTP_CLIENT_IP");
        }
        if (ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) {
            ip = request.getHeader("HTTP_X_FORWARDED_FOR");
        }
        if (ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) {
            ip = request.getRemoteAddr();
        }
        // 如果是多级代理,那么取第一个ip为客户端ip
        if (ip != null && ip.contains(",")) {
            ip = ip.substring(0, ip.indexOf(",")).trim();
        }

        return ip;
    }

    private void writeResult(HttpServletResponse response, ResultData result){
        response.setCharacterEncoding("UTF-8");
        response.setHeader("Content-type", "application/json;charset=UTF-8");
        response.setStatus(200);
        PrintWriter writer=null;
        try {
            writer=response.getWriter();
            response.getWriter().write(JSON.toJSONString(result));
        } catch (IOException ex) {
            logger.error(ex.getMessage());
        }finally {
            if (writer!=null){
                writer.close();
            }
        }
    }
}

 

© 著作权归作者所有

HGMrWang
粉丝 7
博文 88
码字总数 41633
作品 0
深圳
程序员
私信 提问
Spring Boot 静态资源文件配置

Spring Boot 静态资源文件配置 说在前面的话: 创建SpringBoot应用,选中我们需要的模块 SpringBoot已经默认将这些场景配置好了,只需要在配置文件中指定少量配置就可以运行起来 自己编写业务...

胖先森
2018/12/28
0
0
SpringBoot项目配置继承WebMvcConfigurationSupport导致自动化配置失效的解决方案

一、 问题提出 首先我们看一下WebMvc自动配置类WebMvcAutoConfiguration的定义: 可能你也注意到了我圈起来到这个关键语句: @ConditionalOnMissingBean(WebMvcConfigurationSupport.class) ...

nonnetta
2018/11/02
592
2
Spring Boot学习笔记

多模块开发 [SpringBoot学习]-IDEA创建Gradle多Module结构的SpringBoot项目 RabbitMQ RabbitMQ 安装 linux安装RabbitMQ详细教程 Ubuntu 16.04 RabbitMq 安装与运行(安装篇) ubantu安装...

OSC_fly
2018/07/26
0
0
SpringBoot拦截器路径配置没有SpringMVC的智能???

SpringBoot配置路径如下: @Configuration public class MyWebAppConfigurer extends WebMvcConfigurerAdapter { @Override public void addInterceptors(InterceptorRegistry registry) { /......

Alexdevlin
2017/10/30
947
2
springboot 2.0 配置 spring.jackson.date-format 不生效

问题:application.properties中的如下配置不生效,返回时间戳 spring.jackson.date-format=yyyy-MM-dd HH:mm:ss 原因分析: 拦截器继承的 WebMvcConfigurationSupport ! 以前是用 WebMvcCo...

沧海一刀
2018/11/01
609
0

没有更多内容

加载失败,请刷新页面

加载更多

OSChina 周四乱弹 —— 当你简历注水但还是找到了工作

Osc乱弹歌单(2019)请戳(这里) 【今日歌曲】 @花间小酌 :#今日歌曲推荐# 分享成龙的单曲《男儿当自强》。 《男儿当自强》- 成龙 手机党少年们想听歌,请使劲儿戳(这里) @hxg2016 :刚在...

小小编辑
今天
2.9K
22
靠写代码赚钱的一些门路

作者 @mezod 译者 @josephchang10 如今,通过自己的代码去赚钱变得越来越简单,不过对很多人来说依然还是很难,因为他们不知道有哪些门路。 今天给大家分享一个精彩的 GitHub 库,这个库整理...

高级农民工
昨天
5
0
用好项目管理工具,人人都可以成为项目经理

现在市面上的项目管理工具越来越多了,但是大多数都是一些协同工具或轻量项目管理工具。如果是多团队、跨部门使用或者企业级的项目管理,从管理思想到工具运用,需要适应企业的业务流程体系,...

cs平台
昨天
12
0
只需一步,在Spring Boot中统一Restful API返回值格式与统一处理异常

统一返回值 在前后端分离大行其道的今天,有一个统一的返回值格式不仅能使我们的接口看起来更漂亮,而且还可以使前端可以统一处理很多东西,避免很多问题的产生。 比较通用的返回值格式如下:...

晓月寒丶
昨天
69
0
区块链应用到供应链上的好处和实际案例

区块链可以解决供应链中的很多问题,例如记录以及追踪产品。那么使用区块链应用到各产品供应链上到底有什么好处?猎头悬赏平台解优人才网小编给大家做个简单的分享: 使用区块链的最突出的优...

猎头悬赏平台
昨天
32
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部