Close

Spring MVC - WebMvcConfigurerAdapter Examples

Spring MVC 

Extending WebMvcConfigurerAdapter to register Custom AnnotationFormatterFactory

@EnableWebMvc
@Configuration
@Import(MyViewConfig.class)
public class MyWebConfig extends WebMvcConfigurerAdapter {


@Override
public void addFormatters (FormatterRegistry registry) {
AddressFormatAnnotationFormatterFactory factory = new
AddressFormatAnnotationFormatterFactory();

registry.addFormatterForFieldAnnotation(factory);
}



@Bean
public CustomerController customerController () {
return new CustomerController();
}

@Bean
public CustomerDataService userService () {
return new InMemoryCustomerDataService();
}
}
Original Post




Extending WebMvcConfigurerAdapter to add Custom Converter

import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.Import;
import org.springframework.format.FormatterRegistry;
import org.springframework.web.servlet.config.annotation.EnableWebMvc;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurerAdapter;
@EnableWebMvc
@Configuration
@Import(MyViewConfig.class)
public class TradeConfig extends WebMvcConfigurerAdapter {

@Bean
public TradeController tradeParamRequestController() {
return new TradeController();
}

@Bean
public TradeService tradeService(){
return new TradeService();
}


@Override
public void addFormatters (FormatterRegistry registry) {
registry.addConverter(new TradeIdToTradeConverter(tradeService()));
}

}
Original Post




Extending WebMvcConfigurerAdapter to add custom Formatter

@EnableWebMvc
@Configuration
@Import(MyViewConfig.class)
public class MyWebConfig extends WebMvcConfigurerAdapter {


@Override
public void addFormatters (FormatterRegistry registry) {
AddressFormatter addressFormatter = new AddressFormatter();
addressFormatter.setStyle(AddressFormatter.Style.REGION);
registry.addFormatter(addressFormatter);
}


@Bean
public CustomerController customerController () {
return new CustomerController();
}

@Bean
public CustomerDataService userService () {
return new InMemoryCustomerDataService();
}
}
Original Post




Registering a custom Interceptor

@EnableWebMvc
@Configuration
public class MyWebConfig extends WebMvcConfigurerAdapter {

@Override
public void addInterceptors (InterceptorRegistry registry) {
registry.addInterceptor(new LoginInterceptor());
}

@Bean
public AppController tradeController () {
return new AppController();
}

@Bean
public UserService userService () {
return new InMemoryUserService();
}

@Bean
public ViewResolver viewResolver () {
InternalResourceViewResolver viewResolver = new InternalResourceViewResolver();
viewResolver.setPrefix("/WEB-INF/views/");
viewResolver.setSuffix(".jsp");
return viewResolver;
}
}
Original Post
    @SpringBootApplication
public static class BootApplication extends WebMvcConfigurerAdapter {
@Override
public void addInterceptors (InterceptorRegistry registry) {
registry.addInterceptor(new MyAsyncHandlerInterceptor());
}
}
Original Post




Using a custom TaskExecutor for async processing.

package com.logicbig.example;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.context.annotation.Bean;
import org.springframework.scheduling.concurrent.ThreadPoolTaskExecutor;
import org.springframework.web.servlet.config.annotation.AsyncSupportConfigurer;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurerAdapter;

@SpringBootApplication
public class AsyncConfigExample {

@Bean
WebMvcConfigurer configurer () {
return new WebMvcConfigurerAdapter() {
@Override
public void configureAsyncSupport (AsyncSupportConfigurer configurer) {
ThreadPoolTaskExecutor t = new ThreadPoolTaskExecutor();
t.setCorePoolSize(10);
t.setMaxPoolSize(100);
t.setQueueCapacity(50);
t.setAllowCoreThreadTimeOut(true);
t.setKeepAliveSeconds(120);
t.initialize();
configurer.setTaskExecutor(t);
}
};
}

public static void main (String[] args) {
SpringApplication.run(AsyncConfigExample.class, args);
}
}
Original Post




Adding custom location for static pages in a boot application.

package com.logicbig.example;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.EnableAutoConfiguration;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.context.annotation.Bean;
import org.springframework.web.servlet.config.annotation.ResourceHandlerRegistry;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurerAdapter;

@EnableAutoConfiguration
public class AddCustomLocations {
@Bean
WebMvcConfigurer configurer () {
return new WebMvcConfigurerAdapter() {
@Override
public void addResourceHandlers (ResourceHandlerRegistry registry) {
registry.addResourceHandler("/pages/**").
addResourceLocations("classpath:/my-custom-location/");
}
};
}

public static void main (String[] args) {

SpringApplication app =
new SpringApplication(AddCustomLocations.class);
app.run(args);
}
}
Original Post
    @Bean
public WebMvcConfigurer configurer () {
return new WebMvcConfigurerAdapter() {
@Override
public void addInterceptors (InterceptorRegistry registry) {
TzRedirectInterceptor interceptor = new TzRedirectInterceptor();
InterceptorRegistration i = registry.addInterceptor(interceptor);
i.excludePathPatterns("/tzHandler", "/tzValueHandler");
}
};
}
Original Post




WebMvcConfigurerAdapter#addResourceHandlers adds a resource handler for serving static resources based on the specified URL path patterns. ResourceHandlerRegistry stores the registration of resources.

    @Bean
public WebMvcConfigurerAdapter webConfigurer () {
return new WebMvcConfigurerAdapter() {
@Override
public void addResourceHandlers (ResourceHandlerRegistry registry) {
registry.addResourceHandler("/static/**")
.addResourceLocations("/static/");
}
};
}
Original Post




@SpringBootApplication
public class Main {

public static void main (String[] args) {
SpringApplication.run(Main.class, args);
}

@Bean
public WebMvcConfigurerAdapter webConfigurer () {
return new WebMvcConfigurerAdapter() {
@Override
public void addResourceHandlers (ResourceHandlerRegistry registry) {
registry.addResourceHandler("/static/**")
.addResourceLocations("/static/")
.setCachePeriod(30);
}
};
}
}
Original Post
@SpringBootApplication
public class Main extends WebMvcConfigurerAdapter {

@Override
public void addViewControllers (ViewControllerRegistry registry) {
ViewControllerRegistration r = registry.addViewController("/test");
r.setViewName("myView");
r.setStatusCode(HttpStatus.GONE);
}

public static void main (String[] args) {
SpringApplication.run(Main.class, args);
}
}




@SpringBootApplication
public class Main extends WebMvcConfigurerAdapter {

@Override
public void addViewControllers (ViewControllerRegistry registry) {
registry.addStatusController("/test2", HttpStatus.SERVICE_UNAVAILABLE);
}

public static void main (String[] args) {
SpringApplication.run(Main.class, args);
}
}




@SpringBootApplication
public class Main extends WebMvcConfigurerAdapter {

@Override
public void addViewControllers (ViewControllerRegistry registry) {
RedirectViewControllerRegistration r =
registry.addRedirectViewController("/test", "/test2");
//r.setStatusCode(HttpStatus.SEE_OTHER);
//r.setContextRelative(false)
}

public static void main (String[] args) {
SpringApplication.run(Main.class, args);
}
}
@SpringBootApplication
public class Main extends WebMvcConfigurerAdapter {

@Override
public void addViewControllers (ViewControllerRegistry registry) {

//mapping url to a view
ViewControllerRegistration r = registry.addViewController("/test");
r.setViewName("myView");
//setting status code
r.setStatusCode(HttpStatus.GONE);

//mapping another url to a status code
registry.addStatusController("/test2", HttpStatus.SERVICE_UNAVAILABLE);
}

public static void main (String[] args) {
SpringApplication.run(Main.class, args);
}
}
Original Post




@SpringBootApplication
public class Main extends WebMvcConfigurerAdapter {

@Override
public void addViewControllers (ViewControllerRegistry registry) {
RedirectViewControllerRegistration r =
registry.addRedirectViewController("/test", "/test2");
//r.setStatusCode(HttpStatus.SEE_OTHER);
//r.setContextRelative(false)
}

public static void main (String[] args) {
SpringApplication.run(Main.class, args);
}
}
Original Post




Registering a custom HttpMessageConverter

import org.springframework.context.annotation.ComponentScan;
import org.springframework.http.converter.HttpMessageConverter;
import org.springframework.web.servlet.config.annotation.EnableWebMvc;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurerAdapter;

import java.util.List;

@EnableWebMvc
@ComponentScan("com.logicbig.example")
public class AppConfig extends WebMvcConfigurerAdapter {

@Override
public void extendMessageConverters (List<HttpMessageConverter<?>> converters) {
converters.add(new YamlHttpMessageConverter<>());
}
}
Original Post




@EnableWebMvc
@Configuration
public class AppConfig extends WebMvcConfigurerAdapter {

@Bean
public SimpleUrlHandlerMapping simpleUrlHandlerMapping () {
SimpleUrlHandlerMapping mapping = new SimpleUrlHandlerMapping();
Map<String, Object> map = new HashMap<>();
map.put("/app", httpRequestHandler());
mapping.setUrlMap(map);
mapping.setInterceptors(new Object[]{new MyInterceptor()});
return mapping;
}

@Bean
HttpRequestHandler httpRequestHandler () {
return new MyHttpRequestHandler();
}

@Override
public void addInterceptors (InterceptorRegistry registry) {
InterceptorRegistration ir = registry.addInterceptor(new MyInterceptor());
}

@Bean
ExampleController controller () {
return new ExampleController();
}
}
Original Post




@EnableWebMvc
@Configuration
@ComponentScan
public class MyWebConfig extends WebMvcConfigurerAdapter {

@Override
public void configureContentNegotiation (ContentNegotiationConfigurer configurer) {
configurer.favorParameter(true);
// configurer.ignoreAcceptHeader(true);
}
}
Original Post




@EnableWebMvc
@Configuration
@ComponentScan
public class MyWebConfig extends WebMvcConfigurerAdapter {

@Override
public void configureContentNegotiation (ContentNegotiationConfigurer configurer) {
configurer.defaultContentType(MediaType.APPLICATION_JSON);
}
}
Original Post




@EnableWebMvc
@Configuration
@ComponentScan
public class MyWebConfig extends WebMvcConfigurerAdapter {

@Override
public void configureContentNegotiation (ContentNegotiationConfigurer configurer) {
// configurer.defaultContentType(MediaType.APPLICATION_JSON);
configurer.defaultContentTypeStrategy(new MyCustomContentNegotiationStrategy());
}
}
Original Post




@EnableWebMvc
@Configuration
public class MyWebConfig extends WebMvcConfigurerAdapter {

@Override
public void addViewControllers (ViewControllerRegistry registry) {
registry.addViewController("/test").setViewName("myView");
}

public void others () {
}
}




@EnableWebMvc
@Configuration
@ComponentScan
public class MyWebConfig extends WebMvcConfigurerAdapter {

@Override
public void configureViewResolvers (ViewResolverRegistry registry) {
//by default prefix = "/WEB-INF/" and suffix = ".jsp"
registry.jsp().prefix("/WEB-INF/views/");
}
}
Original Post




See Also