Error page in Spring Boot application with CookieLocaleResolver

I Have a Spring Boot application which has the&nbsp;<code>org.springframework.web.servlet.i18n.CookieLocaleResolver</code>&nbsp;for locale resolver. If there is a invalid language cookie like&nbsp;<code>!en</code>&nbsp;then there will be an exception&nbsp;<code>java.lang.IllegalArgumentException: Locale part &amp;quot;!en&amp;quot; contains invalid characters</code>.

I Have a Spring Boot application which has the org.springframework.web.servlet.i18n.CookieLocaleResolver for locale resolver. If there is a invalid language cookie like !en then there will be an exception java.lang.IllegalArgumentException: Locale part &quot;!en&quot; contains invalid characters.

The problem is this exception is not handled by Spring Boot instead it is forwarded to Servlet container. So the default error page of the the container is shown (In my case it is JBoss EAP 6) which will show the stacktrace.

Other exceptions from the controllers are handled properly. For example I have a controller mapping which will throw / by zero error which is handled properly.

I have tried error page configuration in web.xml as follows.


And mapped both /error and /500 to a MVC controller as follows.

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.autoconfigure.web.AbstractErrorController;
import org.springframework.boot.autoconfigure.web.ErrorAttributes;
import org.springframework.http.ResponseEntity;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;

import javax.servlet.http.HttpServletRequest;

public class CustomErrorController extends AbstractErrorController {
public static final String ERROR_500 = "/500";
private static final String ERROR_PATH= "/error";

public CustomErrorController(ErrorAttributes errorAttributes) {

 * Responsible for handling all errors and throw especial exceptions
 * for some HTTP status codes. Otherwise, it will return a map that
 * ultimately will be converted to a json error.
public ResponseEntity&lt;?&gt; handleErrors(HttpServletRequest request) {
    return ResponseEntity.status(getStatus(request)).body(getErrorAttributes(request, false));

public String getErrorPath() {
    return ERROR_PATH;


But still I'm getting the container's default error page. How to resolve this.

Test application code is here

Spring Boot Tutorial For Beginner- Spring Boot Full Course

Spring Boot Tutorial For Beginner- Spring Boot Full Course

This "Spring Boot Tutorial For Beginner- Spring Boot Full Course" video will help you learn Spring Boot Framework from scratch with examples. This Spring Tutorial is ideal for both beginners as well as professionals who want to master the Spring Boot Framework

Spring Boot Full Course - Learn Spring Boot In 4 Hours | Spring Boot Tutorial For Beginner

Below are the topics covered in this Spring Boot Tutorial for Beginners video:

1:40 What is Spring Boot?
2:35 Features of Spring Boot
3:50 Why Do We Need Spring Boot?
4:30 Spring Boot Market Trend
5:15 Spring vs Spring Boot
6:25 Install & Setup Spring Boot
6:45 System Requirements
7:35 Install & Set up Spring Boot CLI
14:00 Install & Setup Spring Tool Suite
25:40 Model View Controller
26:00 What is MVC?
27:35 Model View Controller Workflow
29:00 What is Dependency Injection?
31:50 Inversion of Control
33:10 Types of Dependency Injection
34:05 Benefits of Dependency Injection
48:35 Auto wire
49:50 Create First Web Application Using Spring Boot
1:06:50 Create a Web Application To Pass Client Data
1:13:40 Model View & Object Example
1:20:30 Create a Submission Form In Spring Boot
1:40:50 Connect Web Application To Database
2:04:50 REST API
2:07:35 What is REST API?
2:08:50 Features of REST API
2:09:35 Principles of REST API
2:11:40 Methods of REST API
2:12:20 REST API Hands-On
2:35:55 Spring Data REST
2:36:55 Spring Data REST Hands-On
2:46:35 Spring Security
2:47:30 Secure Applications Using Spring Boot
2:58:56 Spring Boot Interview Questions

Spring Boot Eclipse and CLI Setup to Run Spring Boot Applications

Spring Boot Eclipse and CLI Setup to Run Spring Boot Applications

If you want to run this project using the Spring Boot CLI, then open the command prompt and change your working directory to the project path. Now type mvn spring-boot:run to run this project. This will give you the following output indicating whether the application has started or not.

Install Spring Tool Suite (STS) in Eclipse

Step 1: To use Eclipse on Windows, you need to first install Java Development Kit (JDK). You can download JAVA from the Oracle site.

Step 2: Accept the License Agreement and choose the executable file for the operating system. Here I would be downloading for Windows with 64 bit. Refer to the snapshot below.

Step 3: Once the download is complete, run the exe for install JDK. and click Next. Refer to the snapshot below.

Step 4: After the installation is complete click on Close

Step 5: Now, set the environment variables in Java.

Step 5.1: Right-click on My Computer/This PC -> More -> Properties. 

Step 5.2: Go to Advanced System Settings -> Environment Variables.

Step 5.3: Add JAVA_HOME variable in the Windows environment, and point it to your Java JDK folder. Refer to the snapshot below.

Step 5.4: Update the PATH variable, and append the Java bin folder. Refer to the snapshot below.

Step 5.6: To verify if Java is installed or not, type java -version on the command prompt.

Step 6: After JAVA has been configured in your PC, you can download Eclipse IDE for JAVA JEE Developers and extract these files to a specific folder.

Step 7: Once you are done installing Eclipse on your PC, go to Help -> Eclipse MarketPlace. A dialog box opens up with a list of all the available software. Search for Spring Tool Suite (STS) and Install it.

Step 8: Once the tool is installed, click on File -> New -> Other. A dialog box opens up. In that, select Spring Boot Starter Project under the Spring Boot option and click Next.

Step 9: In the next screen that opens up, choose the following for your project:

  • Group ID
  • Artifact ID
  • Root package
  • Version
  • Description
  • Java version
  • Language
  • Packaging

Here, make sure you select Maven as Type and click Next. Refer to the snapshot below.

Step 10: In the next dialog box that shows up, select the dependencies that you want to add to your Spring Boot Eclipse Project and click Finish. Refer the snapshot below.

Step 11: Now, you will observe that your SpringBoot Eclipse project has been created on the left-hand side of the Eclipse IDE.

Step 12: After the project is created, configure the classes for your application according to your needs.

Step 13: To run this newly created Spring Boot Eclipse project, right-click on the project, and select Run As – > Spring Boot App. Internally this method creates an instance of the embedded Tomcat server at the default port of 8080 and runs the application in it. Refer to the snapshot below.

Now, let us explore the second option.

Spring Boot CLI Setup

Step 1: To create Spring Boot Eclipse project first download Apache Maven and Spring Boot CLIfrom their respective official sites.

Step 2: Download Apache Maven

Step 2.1: Visit Maven official website and download the Maven zip file, for example,

Step 2.2: Unzip it to the folder you want to install Maven.

Assume that you unzip to this directory C:pache-maven-3.5.2.

Step 2.3: Add M2_HOME and MAVEN_HOME variables in the Windows environment, and point it to your Maven folder.

Step 2.4: Update the PATH variable, and append the Maven bin folder –C:pache-maven-3.5.2in.Refer to the snapshot below.

Step2.5: Verify whether maven is installed or not, with mvn -version command in the command prompt.

Step 3: Download the Spring Boot CLI tool

Step 3.1: Download Spring Boot CLI from its official website.

Step 3.2: Unzip the downloaded file the folder you want to install Spring CLI.

Assume that you unzip it to this directory C:spring-2.0.0.RELEASE.

Step 3.3: Add SPRING_HOME variable in the Windows environment, and point it to your Spring folder. Refer to the snapshot below.

Step 3.4: Update the PATH variable, and append the Spring bin folder – C:spring-2.0.0.RELEASEin. Refer to the snapshot below.

Step 3.5: Verify whether Spring is installed or not, with spring –version command in the command prompt.

Step 4: Now go to your project directory where you have created the Spring project and copy the path.

Step 5: Change the working directory to the project path on the command prompt using the command cd. Assume here the path is C:UsersSahitiDesktopExample.

Step 6: Run the project using the command mvn spring-boot:run

Now let us create a Hello World Application in both the ways.

Spring Boot Hello World Example

Initially, let us create a maven project by choosing Spring Starter project wizard from the file menu of Eclipse IDE with the name HelloWorld_Example and select the required dependencies.

This application has an auto-created Java file.This Java file acts an entry point for the application. It imports classes and uses annotations. Refer to the snapshot below.

Even though this application acts ready as a stand-alone application, we will still add a configuration file to it. This will help us handle the HTTP requests. Refer to the snapshot below.

Now, run the application as a Spring Boot App. You observe that the application has started and produces the following output on the console.

This application runs on 8080. So, if we pass /hello request to the following port number, then it produces the message returned from the requested method in the configuration file. Refer to the snapshot below.

If you want to run this project using the Spring Boot CLI, then open the command prompt and change your working directory to the project path. 

Now type mvn spring-boot:run to run this project. This will give you the following output indicating whether the application has started or not.

Now you can run on the browser and it this produces the same output as the previous.

Thank you for reading!

Spring Boot vs. Spring MVC vs. Spring: How Do They Compare?

Spring Boot vs. Spring MVC vs. Spring: How Do They Compare?

In this article, you will receive overviews of Spring, Spring MVC, and Spring Boot, learn what problems they solve, and where they’re best applied. The most important thing that you will learn is that Spring, Spring MVC, and Spring Boot are not competing for the same space. They solve different problems and they solve them very well.

In this article, you will receive overviews of Spring, Spring MVC, and Spring Boot, learn what problems they solve, and where they’re best applied. The most important thing that you will learn is that Spring, Spring MVC, and Spring Boot are not competing for the same space. They solve different problems and they solve them very well.

Spring, Spring Boot, Spring MVC, there are springs everywhere! Let's walk through where and when you should apply each of these tools.

What Is the Core Problem That Spring Framework Solves?

Think long and hard. What’s the problem Spring Framework solves?

The most important feature of Spring Framework is Dependency Injection. At the core of all Spring Modules is Dependency Injection or IOC Inversion of Control.
Why is this important? Because, when DI or IOC is used properly, we can develop loosely coupled applications. And loosely coupled applications can be easily unit tested.

Let’s consider a simple example.

Example Without Dependency Injection

Consider the example below: WelcomeController depends on WelcomeService to get the welcome message. What is it doing to get an instance of WelcomeService?

WelcomeService service = new WelcomeService();

It’s creating an instance of it. And that means they are tightly coupled. For example: If I create a mock for WelcomeService in a unit test for WelcomeController, how do I make WelcomeController use the mock? Not easy!

public class WelcomeController {

    private WelcomeService service = new WelcomeService();

    public String welcome() {
        return service.retrieveWelcomeMessage();

Same Example with Dependency Injection

The world looks much simpler with dependency injection. You let the Spring Framework do the hard work. We just use two simple annotations: @Component and @Autowired.

  • Using @Component, we tell Spring Framework: Hey there, this is a bean that you need to manage.
  • Using @Autowired, we tell Spring Framework: Hey find the correct match for this specific type and autowire it in.

In the example below, Spring framework would create a bean for WelcomeService and autowire it into WelcomeController.

In a unit test, I can ask the Spring framework to auto-wire the mock of WelcomeService into WelcomeController. (Spring Boot makes things easy to do this with @MockBean. But, that’s a different story altogether!)

public class WelcomeService {
    //Bla Bla Bla

public class WelcomeController {

    private WelcomeService service;

    public String welcome() {
        return service.retrieveWelcomeMessage();

What Else Does Spring Framework Solve?

Problem 1: Duplication/Plumbing Code

Does Spring Framework stop with Dependency Injection? No. It builds on the core concept of Dependency Injection with a number of Spring Modules

  • Spring JDBC
  • Spring MVC
  • Spring AOP
  • Spring ORM
  • Spring JMS
  • Spring Test

Consider Spring JMS and Spring JDBC for a moment.

Do these modules bring in any new functionality? No. We can do all this with J2EE or Java EE. So, what do these bring in? They bring in simple abstractions. The aim of these abstractions is to

  • Reduce Boilerplate Code/Reduce Duplication
  • Promote Decoupling/Increase Unit Testability

For example, you need much less code to use a JDBCTemplate or a JMSTemplate compared to a traditional JDBC or JMS.

Problem 2: Good Integration With Other Frameworks

The great thing about Spring Framework is that it does not try to solve problems that are already solved. All that it does is to provide a great integration with frameworks which provide great solutions.

  • Hibernate for ORM
  • iBatis for Object Mapping
  • JUnit and Mockito for Unit Testing
What Is the Core Problem That Spring MVC Framework Solves?

Spring MVC Framework provides decoupled way of developing web applications. With simple concepts like Dispatcher Servlet, ModelAndView and View Resolver, it makes it easy to develop web applications.## Why Do We Need Spring Boot?

Spring based applications have a lot of configuration.

When we use Spring MVC, we need to configure component scan, dispatcher servlet, a view resolver, web jars(for delivering static content) among other things.

        <property name="prefix">
        <property name="suffix">

  <mvc:resources mapping="/webjars/**" location="/webjars/"/>

The code snippet below shows the typical configuration of a dispatcher servlet in a web application.



When we use Hibernate/JPA, we would need to configure a datasource, an entity manager factory, a transaction manager among a host of other things.

    <bean id="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource"
        <property name="driverClass" value="${db.driver}" />
        <property name="jdbcUrl" value="${db.url}" />
        <property name="user" value="${db.username}" />
        <property name="password" value="${db.password}" />

    <jdbc:initialize-database data-source="dataSource">
        <jdbc:script location="classpath:config/schema.sql" />
        <jdbc:script location="classpath:config/data.sql" />

        <property name="persistenceUnitName" value="hsql_pu" />
        <property name="dataSource" ref="dataSource" />

    <bean id="transactionManager" class="org.springframework.orm.jpa.JpaTransactionManager">
        <property name="entityManagerFactory" ref="entityManagerFactory" />
        <property name="dataSource" ref="dataSource" />

    <tx:annotation-driven transaction-manager="transactionManager"/>

Problem #1: Spring Boot Auto Configuration: Can We Think Different?

Spring Boot brings a new thought process around this.

Can we bring more intelligence into this? When a spring mvc jar is added into an application, can we auto configure some beans automatically?* How about auto-configuring a Data Source if Hibernate jar is on the classpath?

  • How about auto-configuring a Dispatcher Servlet if Spring MVC jar is on the classpath?

There would be provisions to override the default auto configuration.

Spring Boot looks at a) Frameworks available on the CLASSPATH b) Existing configuration for the application. Based on these, Spring Boot provides basic configuration needed to configure the application with these frameworks. This is called Auto Configuration.### Problem #2: Spring Boot Starter Projects: Built Around Well-Known Patterns

Let’s say we want to develop a web application.

First of all, we would need to identify the frameworks we want to use, which versions of frameworks to use and how to connect them together.

All web application have similar needs. Listed below are some of the dependencies we use in our Spring MVC Course. These include Spring MVC, Jackson Databind (for data binding), Hibernate-Validator (for server side validation using Java Validation API) and Log4j (for logging). When creating this course, we had to choose the compatible versions of all these frameworks.





Here’s what the Spring Boot documentations says about starters.

Starters are a set of convenient dependency descriptors that you can include in your application. You get a one-stop-shop for all the Spring and related technology that you need, without having to hunt through sample code and copy paste loads of dependency descriptors. For example, if you want to get started using Spring and JPA for database access, just include the spring-boot-starter-data-jpa dependency in your project, and you are good to go.
Let’s consider an example starter: Spring Boot Starter Web.

If you want to develop a web application or an application to expose restful services, Spring Boot Start Web is the starter to pick. Let’s create a quick project with Spring Boot Starter Web using Spring Initializr.

Dependency for Spring Boot Starter Web


The following screenshot shows the different dependencies that are added into our application

Dependencies can be classified into:

  • Spring: core, beans, context, aop
  • Web MVC: (Spring MVC)
  • Jackson: for JSON Binding
  • Validation: Hibernate Validator, Validation API
  • Embedded Servlet Container: Tomcat
  • Logging: logback, slf4j

Any typical web application would use all these dependencies. Spring Boot Starter Web comes pre-packaged with these. As a developer, I would not need to worry about either these dependencies or their compatible versions.

Spring Boot Starter Project Options

As we see from Spring Boot Starter Web, starter projects help us in quickly getting started with developing specific types of applications.

  • spring-boot-starter-web-services: SOAP Web Services
  • spring-boot-starter-web: Web and RESTful applications
  • spring-boot-starter-test: Unit testing and Integration Testing
  • spring-boot-starter-jdbc: Traditional JDBC
  • spring-boot-starter-hateoas: Add HATEOAS features to your services
  • spring-boot-starter-security: Authentication and Authorization using Spring Security
  • spring-boot-starter-data-jpa: Spring Data JPA with Hibernate
  • spring-boot-starter-cache: Enabling Spring Framework’s caching support
  • spring-boot-starter-data-rest: Expose Simple REST Services using Spring Data REST
Other Goals of Spring Boot

There are a few starters for technical stuff as well

  • spring-boot-starter-actuator: To use advanced features like monitoring and tracing to your application out of the box
  • spring-boot-starter-undertow, spring-boot-starter-jetty, spring-boot-starter-tomcat: To pick your specific choice of Embedded Servlet Container
  • spring-boot-starter-logging: For Logging using logback
  • spring-boot-starter-log4j2: Logging using Log4j2

Spring Boot aims to enable production ready applications in quick time.

  • Actuator: Enables Advanced Monitoring and Tracing of applications.
  • Embedded Server Integrations: Since the server is integrated into the application, I would need to have a separate application server installed on the server.
  • Default Error Handling