SpringBoot 配置类整理 (长期保持更新)

2021-12-08 21:32:24 浏览数 (1)

SpringBoot 配置类整理

  • 一、跨域请求后端解决方案
  • 二、MVC 使用 Java 编码解决静态文件不加载
  • 三、封装统一返回结果集时,解决返回 null 值问题
  • 四、SpringBoot 整合 swagger2 配置类编写
  • 五、MVC 拦截器配置
  • 六、MVC 视图控制器 (ViewController)

如下配置类不需要特意去记忆

一、跨域请求后端解决方案

代码语言:javascript复制
package cn.gorit.config;

import org.springframework.context.annotation.Configuration;
import org.springframework.web.servlet.config.annotation.CorsRegistry;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;

//解决跨域问题
@Configuration
public class CrosConfig implements WebMvcConfigurer {

    @Override
    public void addCorsMappings(CorsRegistry registry) {
        registry.addMapping("/**")
                .allowedOrigins("*")
                .allowedMethods("GET","POST","HEAD","PUT","DELETE")
                .allowCredentials(true)
                .maxAge(3600)
                .allowedHeaders("*");
    }

	// 如果同时配置了拦截器,上面的方法就会失效,可以使用下面的方式解决跨域问题
	    /**
     * 问题:配置 JWT ,使用拦截器出现跨域问题
     * 跨越配置
     * 改用过滤器CorsFilter 来配置跨域,由于Filter的位置是在Interceptor之前的,问题得到解决:
     */

    @Autowired
    JWTInterceptor jwtInterceptor;

    @Bean
    public CorsFilter corsFilter() {
        CorsConfiguration config = new CorsConfiguration();
        // 设置允许跨域请求的域名
        config.addAllowedOrigin("*");
        // 是否允许证书 不再默认开启
         config.setAllowCredentials(true);
        // 设置允许的方法
        config.addAllowedMethod("*");
        // 允许任何头
        config.addAllowedHeader("*");
        config.addExposedHeader("token");
        UrlBasedCorsConfigurationSource configSource = new UrlBasedCorsConfigurationSource();
        configSource.registerCorsConfiguration("/**", config);
        return new CorsFilter(configSource);
    }
}

二、MVC 使用 Java 编码解决静态文件不加载

在 resources 目录下的 static 的静态文件给外部访问

代码语言:javascript复制
package cn.gorit.config;

import org.springframework.context.annotation.Configuration;
import org.springframework.web.servlet.config.annotation.ResourceHandlerRegistry;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;

@Configuration
public class WebMvcConfig implements WebMvcConfigurer {

    @Override
    public void addResourceHandlers(ResourceHandlerRegistry registry) {
        registry
                .addResourceHandler("/static/**")
                .addResourceLocations("classpath:/static/");
    }
}

三、封装统一返回结果集时,解决返回 null 值问题

当我们想要返回 json 格式数据的时候,难免会出现 null 值得情况,因此加入如下配置即可解决问题,使用默认的 jackson 解决问题。

代码语言:javascript复制
import com.fasterxml.jackson.core.JsonGenerator;
import com.fasterxml.jackson.databind.JsonSerializer;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.fasterxml.jackson.databind.SerializerProvider;
import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.Primary;
import org.springframework.http.converter.json.Jackson2ObjectMapperBuilder;

import java.io.IOException;

/**
 * 使用 SpringBoot 默认的 jackjson 解决 统一结果集为空的情况
 * */

@Configuration
public class NullValueConfiguration {
    
    @Bean
    @Primary
    @ConditionalOnMissingBean(ObjectMapper.class)
    public ObjectMapper jacksonObjectMapper(Jackson2ObjectMapperBuilder builder) {
        ObjectMapper objectMapper = builder.createXmlMapper(false).build();
        objectMapper.getSerializerProvider().setNullValueSerializer(new JsonSerializer<Object>() {
            @Override
            public void serialize(Object o, JsonGenerator jsonGenerator, SerializerProvider serializerProvider) throws IOException, IOException {
                jsonGenerator.writeString("");
            }
        });
        return objectMapper;
    }
}

四、SpringBoot 整合 swagger2 配置类编写

SpringBoot 使用 swagger2 需在相对应的 实体类 和 Controller 中配置相对应的注解,就可以在根路径下的 swagger-ui.html 看到生成的在线文档

代码语言:javascript复制
package cn.gorit.config;

import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import springfox.documentation.builders.ApiInfoBuilder;
import springfox.documentation.builders.PathSelectors;
import springfox.documentation.builders.RequestHandlerSelectors;
import springfox.documentation.service.ApiInfo;
import springfox.documentation.spi.DocumentationType;
import springfox.documentation.spring.web.plugins.Docket;
import springfox.documentation.swagger2.annotations.EnableSwagger2;


/**
 * @Author CondingGorit
 * @Date 2020年7月9日15:17:34
 * http://localhost/swagger-ui.htm
 * */

@Configuration
@EnableSwagger2
public class SwaggerConfig {

    @Bean
    public Docket createRestApi() {
        return  new Docket(DocumentationType.SWAGGER_2)
                // 指定构建 api 文档的详细信息放放:apiInfo()
                .apiInfo(apiInfo())
                .enable(true)
                .select()
                // 指定要生成的 API 接口的包路径,这里把 Controller 作为包路径,生成 Controller 中的所有接口
                .apis(RequestHandlerSelectors.basePackage("cn.gorit.controller"))
                .paths(PathSelectors.any())
                .build();
    }

    /**
     * 构建 API 文档的详细信息
     * @Return
     * */
    private ApiInfo apiInfo() {
        return new ApiInfoBuilder()
                // 设置页面标题
                .title("SpringBoot集成 Swagger2 接口总览")
                // 设置接口描述
                .description("和 Gorit 学习 SpringBoot")
                // 设置联系方式
                .contact("Gorit: gorit@qq.com")
                // 设置版本
                .version("1.0")
                // 构建
                .build();
    }
}

效果图

五、MVC 拦截器配置

代码语言:javascript复制
package cn.gorit.config;

import cn.gorit.interceptors.JWTInterceptor;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.servlet.config.annotation.InterceptorRegistry;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;

/**
 * 拦截器的配置类
 */

@Configuration
public class InterceptorConfig implements WebMvcConfigurer {
    @Override
    public void addInterceptors(InterceptorRegistry registry) {
    	// 这里添加自定义的拦截器
        registry.addInterceptor(new JWTInterceptor())
                .addPathPatterns("/**")           // 拦截的接口
                .excludePathPatterns("/user/**"); // 不拦截的接口
    }
}

六、MVC 视图控制器 (ViewController)

  1. 在 pom.xml 中添加 thymeleaf 依赖
代码语言:javascript复制
        <dependency>
            <groupId>org.springframework.bootgroupId>
            <artifactId>spring-boot-starter-thymeleafartifactId>
        dependency>
  1. 在 templates 目录下添加 index.html、login.html
  2. 添加配置
代码语言:javascript复制
package com.example.config;

import com.example.interceptor.TestInterceptor;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.servlet.config.annotation.InterceptorRegistry;
import org.springframework.web.servlet.config.annotation.ViewControllerRegistry;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;

@Configuration
public class WebMvcConfig implements WebMvcConfigurer {


    /**
     * 拦截器配置访问路径, 配置多个访问的路径
     * @param registry
     */
    @Override
    public void addViewControllers(ViewControllerRegistry registry) {
        registry.addViewController("/idx")
                .setViewName("index.html");
        registry.addViewController("/signin")
                .setViewName("login.html");
    }
}

4. 然后访问指定的路径就可以显示对应的数据

0 人点赞