pl.eplan.config.WebMvcConfig.java Source code

Java tutorial

Introduction

Here is the source code for pl.eplan.config.WebMvcConfig.java

Source

package pl.eplan.config;

import com.fasterxml.jackson.databind.ObjectMapper;
import com.mangofactory.swagger.configuration.SpringSwaggerConfig;
import com.mangofactory.swagger.models.dto.ApiInfo;
import com.mangofactory.swagger.plugin.EnableSwagger;
import com.mangofactory.swagger.plugin.SwaggerSpringMvcPlugin;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.ComponentScan;
import org.springframework.context.annotation.Configuration;
import org.springframework.http.MediaType;
import org.springframework.http.converter.HttpMessageConverter;
import org.springframework.http.converter.StringHttpMessageConverter;
import org.springframework.http.converter.json.MappingJackson2HttpMessageConverter;
import org.springframework.web.servlet.config.annotation.EnableWebMvc;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurerAdapter;

import java.nio.charset.Charset;
import java.util.Arrays;
import java.util.List;

import static com.fasterxml.jackson.databind.DeserializationFeature.READ_ENUMS_USING_TO_STRING;
import static com.fasterxml.jackson.databind.SerializationFeature.WRITE_ENUMS_USING_TO_STRING;

/**
 * 1st - enables MVC java config. 2nd - enables Swagger generator for
 * documentation 3rd - component scanning for beans definitions 4th - indicates
 * that this class declares one ore more @Bean methods, and may be processed to
 * generate beans
 *
 * @author Pavlo Tymchuk
 */
@EnableWebMvc
@EnableSwagger
@ComponentScan(basePackages = { "pl.eplan.resource", "pl.eplan.websocket", "pl.eplan.service" })
@Configuration
public class WebMvcConfig extends WebMvcConfigurerAdapter {

    private static final Charset UTF8 = Charset.forName("UTF-8");

    private SpringSwaggerConfig springSwaggerConfig;

    @Autowired
    public void setSpringSwaggerConfig(SpringSwaggerConfig springSwaggerConfig) {
        this.springSwaggerConfig = springSwaggerConfig;
    }

    @Bean
    public SwaggerSpringMvcPlugin customImplementation() {
        return new SwaggerSpringMvcPlugin(this.springSwaggerConfig).apiInfo(apiInfo()).includePatterns("/.*");
    }

    @Override
    public void configureMessageConverters(List<HttpMessageConverter<?>> converters) {
        addStringConverter(converters);
        addJsonConverter(converters);
    }

    private void addJsonConverter(List<HttpMessageConverter<?>> converters) {
        MappingJackson2HttpMessageConverter jsonConverter = new MappingJackson2HttpMessageConverter(objectMapper());
        //jsonConverter.setPrefixJson(true);
        jsonConverter.setSupportedMediaTypes(Arrays.asList(MediaType.APPLICATION_JSON));
        converters.add(jsonConverter);
    }

    private void addStringConverter(List<HttpMessageConverter<?>> converters) {
        StringHttpMessageConverter stringConverter = new StringHttpMessageConverter(UTF8);
        stringConverter.setWriteAcceptCharset(false);
        converters.add(stringConverter);
    }

    private ApiInfo apiInfo() {
        ApiInfo apiInfo = new ApiInfo("Eplan API", "API for Eplan", "Eplan API terms of service", "eplan@gmail.com",
                "Eplan API Licence Type - MIT", "Eplan API License eplan.pl");
        return apiInfo;
    }

    @Bean
    public ObjectMapper objectMapper() {
        ObjectMapper mapper = new ObjectMapper();
        mapper.enable(WRITE_ENUMS_USING_TO_STRING);
        mapper.enable(READ_ENUMS_USING_TO_STRING);
        return new ObjectMapper();
    }
}