Registering a Custom Formatter in Spring Boot

[Updated: Dec 29, 2017, Created: Dec 8, 2017]

In this example we will see how to do application side Web MVC configuration in Spring boot (See also Spring Boot Web MVC Auto Configuration).


We are going to create and register a custom MVC Formatter in this example.

A custom Formatter

Following formatter parses a String to our helper object TradeAmount and vice versa. The parse() method expects an input string having integers as the amount followed by a valid Currency code e.g. 53USD.

package com.logicbig.example;

import org.springframework.format.Formatter;
import java.math.BigDecimal;
import java.text.ParseException;
import java.util.Currency;
import java.util.Locale;
import java.util.regex.Matcher;
import java.util.regex.Pattern;

public class TradeAmountFormatter implements Formatter<TradeAmount> {
  private static final Pattern amountPattern = Pattern.compile("(\\d+)(\\w+)");

  public TradeAmount parse(String text, Locale locale) throws ParseException {
      Matcher matcher = amountPattern.matcher(text);
      if (matcher.find()) {
          try {
              TradeAmount ta = new TradeAmount();
              ta.setAmount(new BigDecimal(Integer.parseInt(;
              return ta;
          } catch (Exception e) {
      return new TradeAmount();

  public String print(TradeAmount tradeAmount, Locale locale) {
      return tradeAmount.getAmount().toPlainString() + tradeAmount.getCurrency().getSymbol(locale);
public class TradeAmount {
  private Currency currency;
  private BigDecimal amount;

A Controller

public class TradeController {

  public String handleRequest(@RequestParam TradeAmount amount) {
      return "Request param: "+ amount;

Boot main class

public class BootMain {
    public static void main(String[] args) {, args);

    static class MyConfig extends WebMvcConfigurerAdapter {
        public void addFormatters(FormatterRegistry registry) {
            registry.addFormatter(new TradeAmountFormatter());

To try examples, run spring-boot maven plugin (configured in pom.xml of example project below):

mvn spring-boot:run

We can also run the main class from our IDE.


Example Project

Dependencies and Technologies Used:

  • spring-boot-starter-web 1.5.9.RELEASE: Starter for building web, including RESTful, applications using Spring MVC. Uses Tomcat as the default embedded container [Description from spring-boot-starter-web-1.5.9.RELEASE.pom]
    Corresponding Spring version: 4.3.13.RELEASE
  • JDK 1.8
  • Maven 3.3.9

Boot Bean Custom Formatter Example Select All Download
  • spring-boot-mvc-custom-formatter-example
    • src
      • main
        • java
          • com
            • logicbig
              • example

See Also