Trim all the String values in a Java object

 In this post we will see how we can remove leading and trailing spaces from all the String fields in a Java object.

We are going to use Jackson to serialize and deserialize a Java object, and while deserializing we will use a custom implementation to trim all the String fields to Null.


Let's create a custom deserializer for String values in Jackson:

package com.blogspot.devnip.jackson;

import com.fasterxml.jackson.core.JsonParser;
import com.fasterxml.jackson.databind.DeserializationContext;
import com.fasterxml.jackson.databind.JsonDeserializer;


import static java.util.Objects.isNull;

 * Deserializer that will trim all the leading and trailing spaces from a String value.
 * If the final value us empty string ("") it will be returned as null.
public class TrimStringToNullDeserializer extends JsonDeserializer {

    public String deserialize(JsonParser jsonParser, DeserializationContext deserializationContext)
            throws IOException {
        String value = jsonParser.getValueAsString();

        if (isNull(value)) {
            return null;

        value = value.trim();
        if (value.length() == 0) {
            value = null;

        return value;

Now, let's hook it up to Jackson's ObjectMapper as shown below.

package com.blogspot.devnip.jackson;

import com.fasterxml.jackson.core.JsonProcessingException;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.fasterxml.jackson.databind.module.SimpleModule;

import static java.util.Objects.isNull;

 * This class shows, how Jackson can be used to trim all the string values in a Java object.
public class TrimStringToNullConfiguration {

    private ObjectMapper objectMapper;

    public Client trimToNull(Client inputClient) throws JsonProcessingException {
        return getObjectMapper().readValue(getObjectMapper().writeValueAsString(inputClient), Client.class);

    private ObjectMapper getObjectMapper() {
        if (isNull(objectMapper)) {
            objectMapper = new ObjectMapper();
            SimpleModule module = new SimpleModule();
            module.addDeserializer(String.class, new TrimStringToNullDeserializer());
        return objectMapper;

That's it, you can call the `trimToNull()` function of above class to remove all the leading and trailing spaces from all the fields within a Java object.

Refer to below unit-test for how to use this method.

package com.blogspot.devnip.jackson;

import com.fasterxml.jackson.core.JsonProcessingException;
import org.junit.jupiter.api.Assertions;
import org.junit.jupiter.api.Test;

class TrimStringToNullConfigurationTest {

    private TrimStringToNullConfiguration configuration = new TrimStringToNullConfiguration();

     * Demonstrates trimming of all string values in a Java object.
     * @throws JsonProcessingException
    void test() throws JsonProcessingException {
        Client testClient = new Client();
        testClient.setName("   James Smith ");      // String with spaces
        testClient.setSocialId(null);               // Null value
        testClient.setAge(23);                      // Non string value
        Address address = new Address();
        address.setCity("   New York");             // Demonstrates nested fields

        Client result = configuration.trimToNull(testClient);

        Assertions.assertEquals("James Smith", result.getName());
        Assertions.assertEquals("New York", result.getOfficeAddress().getCity());

All the posts in this blog have a working example. Please visit our Github repository


Post a Comment