Java tutorial
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(); } }