Custom Favicon in Spring Boot

In this article, we will discuss how to create a custom favicon in Spring Boot application.

 

Introduction

A favicon is a small, iconic image that represents your website. Favicons are most often found in the address bar of your web browser. Spring Boot looks for a favicon.ico in the predefined configured place. It also provides options to create a custom favicon for our Spring Boot application.

 

1. Override Favicon

Spring Boot looks for anfavicon.ico in the configured static content locations and the root of the classpath (in that order). If such a file is present, it is automatically used as the favicon of the application.We can create a custom favicon in Spring Boot application by placing new favicon either in the resource or static directory in our classpath.

Resource Directory

src/main/resources/favicon.ico

Static Directory

src/main/resources/static/favicon.ico

[pullquote align=”normal”]Make sure to name favicon file as “favicon.ico” [/pullquote]

 

2. Custom Favicon Location

The option 1 is the best and recommended way to create a custom favicon for your Spring Boot application, however, Spring Boot provides an alternate option to completely disable auto scanning process and take complete control using a custom configuration. We can do that by disabling the default favicon in our application.properties file.

spring.mvc.favicon.enabled=false

We add a custom HandlerMapping to do it.

@Configuration
public class FaviconConfiguration {

 @Bean
 public SimpleUrlHandlerMapping faviconHandlerMapping() {
  SimpleUrlHandlerMapping mapping = new SimpleUrlHandlerMapping();
  mapping.setOrder(Integer.MIN_VALUE);
  mapping.setUrlMap(Collections.singletonMap("/favicon.ico",
   faviconRequestHandler()));
  return mapping;
 }

 @Bean
 protected ResourceHttpRequestHandler faviconRequestHandler() {
  ResourceHttpRequestHandler requestHandler = new ResourceHttpRequestHandler();
  requestHandler.setLocations(Arrays
   . < Resource > asList(new ClassPathResource("/")));
  return requestHandler;
 }

}

In the above code, you are free to refer the favicon file at any location.

 

3. Custom Favicon Controller

Spring Boot provides options to completely disable favicon by setting spring.mvc.favicon.enabled property to false, however, a browser may throw 404 error with the above approach. To handle this issue, create a custom favicon controller.

@GetMapping("favicon.ico")
@ResponseBody
public void disableFavicon() {
 //Method is void to avoid browser 404 issue by returning nothing in the response.
}

 

Summary

In this post, we discussed the process to override favicon in the Spring Boot application. We learned how to create a custom favicon in Spring Boot application.