Spring Boot — Configuring Spring Boot to use Gson instead of Jackson | Code Factory

  • Spring Boot uses Jackson by default for serializing and deserializing request and response objects in REST APIs.
  • If you want to use GSON instead of Jackson then it’s just a matter of adding Gson dependency in your pom.xml file and specifying a property in the application.properties file to tell Spring Boot to use Gson as preferred json mapper.

Force Spring Boot to use GSON instead of Jackson

1. Add Gson dependency

  • Add the GSON dependency in pom.xml
<dependency>
<groupId>com.google.code.gson</groupId>
<artifactId>gson</artifactId>
<version>2.8.6</version>
</dependency>
  • After that, Spring Boot will detect Gson dependency on the classpath and automatically create a Gson bean with sensible default configurations. You can also autowire gson in your spring components directly like so
@Autowire
private Gson gson;
  • If you’re curious how Spring Boot does that, then take a look at this GsonAutoConfiguration class. Notice how it uses @ConditionalOnClass(Gson.class) annotation to trigger the auto-configuration when Gson is available on the classpath.
  • Jackson is also configured in a similar fashion with JacksonAutoConfiguration class.

2. Set the preferred json mapper to gson

  • You can now ask Spring Boot to use Gson as your preferred json mapper by specifying the following property in the application.properties file
# Preferred JSON mapper to use for HTTP message conversion.
spring.http.converters.preferred-json-mapper=gson

Configure GSON in Spring Boot

  • Now that your Spring Boot application is using Gson, you can configure Gson by specifying various properties in the application.properties file. For more common application properties please look Common application properties in Spring Boot
# GSON (GsonProperties)spring.gson.date-format= # Format to use when serializing Date objects.spring.gson.disable-html-escaping= # Whether to disable the escaping of HTML characters such as '<', '>', etc.spring.gson.disable-inner-class-serialization= # Whether to exclude inner classes during serialization.spring.gson.enable-complex-map-key-serialization= # Whether to enable serialization of complex map keys (i.e. non-primitives).spring.gson.exclude-fields-without-expose-annotation= # Whether to exclude all fields from consideration for serialization or deserialization that do not have the "Expose" annotation.spring.gson.field-naming-policy= # Naming policy that should be applied to an object's field during serialization and deserialization.spring.gson.generate-non-executable-json= # Whether to generate non executable JSON by prefixing the output with some special text.spring.gson.lenient= # Whether to be lenient about parsing JSON that doesn't conform to RFC 4627.spring.gson.long-serialization-policy= # Serialization policy for Long and long types.spring.gson.pretty-printing= # Whether to output serialized JSON that fits in a page for pretty printing.spring.gson.serialize-nulls= # Whether to serialize null fields.
  • All the above properties are bound to a class called GsonProperties defined in Spring Boot. The GsonAutoConfiguration class uses these properties to configure Gson.

Excluding Jackson completely

  • If you want to get rid of Jackson completely then you can exclude it from spring-boot-starter-web dependency in the pom.xml file
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
<!-- Exclude the default Jackson dependency -->
<exclusions>
<exclusion>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-json</artifactId>
</exclusion>
</exclusions>
</dependency>

--

--

--

Love podcasts or audiobooks? Learn on the go with our new app.

Recommended from Medium

Azure Databricks: How to configure Databricks CLI and multiples workspaces

CI/CD: Shortening the Feedback Loop

Spring Dependency Injection & Inversion of Control

TOPPO Walkthrough

Database Modeling: Relational vs. Transformational

How To Develop A Mobile App For Events: Its Cost, Features and Business Model

Shell: What happens when you type ls *.c

Useful JavaScript Tricks

Get the Medium app

A button that says 'Download on the App Store', and if clicked it will lead you to the iOS App store
A button that says 'Get it on, Google Play', and if clicked it will lead you to the Google Play store
Code Factory

Code Factory

More from Medium

Spring Cloud Stream Kafka errors to Dead Letter Queue (DLQ)

Reactive programming: principles, standards, implementation in Java

Visitor Design Pattern in Java

Communication Between Microservices | Spring WebClient