DEV Community

Cover image for Boolean Field Becomes null in Spring Boot DTO? Here’s Why (And How to Fix It)
Abhishek Shahi
Abhishek Shahi

Posted on

Boolean Field Becomes null in Spring Boot DTO? Here’s Why (And How to Fix It)

If you’re building REST APIs using Spring Boot, you may encounter a strange and frustrating issue:
❓ The request JSON clearly sends a boolean value (true / false),
but inside the DTO, the value becomes null.

  • No exception.
  • No warning.
  • No stack trace.

This is not a bug in Spring Boot — it’s a Jackson + Java Bean naming trap that frequently appears in real-world applications.

In this article, you’ll learn:

  1. - Why boolean values become null in Spring Boot DTOs
  2. - How Jackson maps JSON properties to Java fields
  3. - Why @JsonProperty fixes the issue
  4. - The recommended best practice to avoid this forever

The Problem: Boolean Value Is null in DTO

Consider this request payload sent from the frontend:

{
  "isActive": true
}

Enter fullscreen mode Exit fullscreen mode

Now look at the DTO:

public class UserRequest {

    private Boolean isActive;

    public Boolean getIsActive() {
        return isActive;
    }

    public void setIsActive(Boolean isActive) {
        this.isActive = isActive;
    }
}

Enter fullscreen mode Exit fullscreen mode

Controller code:

@PostMapping("/user")
public void createUser(@RequestBody UserRequest request) {
    System.out.println(request.getIsActive());
}

Enter fullscreen mode Exit fullscreen mode

Actual Output

null

Enter fullscreen mode Exit fullscreen mode

❌ JSON is correct
❌ Mapping fails silently
❌ Debugging becomes painful

Why This Happens (Jackson + Java Bean Rules)
Spring Boot uses Jackson to convert JSON into Java objects.

Jackson does not rely only on field names — it follows Java Bean naming conventions, which depend heavily on getter and setter names.

How Jackson Interprets Boolean Fields
For this field:

private Boolean isActive;

Enter fullscreen mode Exit fullscreen mode

Jackson expects one of these method patterns:

public Boolean isActive()
Enter fullscreen mode Exit fullscreen mode

or

public Boolean getActive()
Enter fullscreen mode Exit fullscreen mode

But what we actually wrote:

public Boolean getIsActive()
Enter fullscreen mode Exit fullscreen mode

The Mismatch

JSON property: isActive
Java property Jackson infers: active
Because of this mismatch, Jackson fails to bind the value — resulting in null.

Solution 1: Use @JsonProperty (Quick Fix)

You can explicitly tell Jackson how to map the JSON property.

Fixed DTO Using @JsonProperty

import com.fasterxml.jackson.annotation.JsonProperty;

public class UserRequest {

    @JsonProperty("isActive")
    private Boolean isActive;

    public Boolean getIsActive() {
        return isActive;
    }

    public void setIsActive(Boolean isActive) {
        this.isActive = isActive;
    }
}

Enter fullscreen mode Exit fullscreen mode

Result

✔ JSON maps correctly
✔ DTO receives true / false
✔ No more null

Solution 2: Best Practice (Highly Recommended)

Instead of fixing the mapping, fix the design.

Avoid starting boolean field names with is.
Preferred DTO Design

public class UserRequest {

    private Boolean active;

    public Boolean getActive() {
        return active;
    }

    public void setActive(Boolean active) {
        this.active = active;
    }
}

Enter fullscreen mode Exit fullscreen mode

Why This Is Better

Fully Java Bean compliant

  • No Jackson annotations required
  • Cleaner, more readable DTOs
  • Fewer bugs in large codebases

boolean vs Boolean in Spring Boot DTOs

Type Default Value Nullable
boolean false No
Boolean null Yes

When to Use What

  • Use boolean when the field is mandatory
  • Use Boolean when the field is optional or tri-state

Common Interview Question

Q: Why does Spring Boot map boolean JSON values to null?
Answer:
Because Jackson follows Java Bean naming conventions. Boolean fields prefixed with is can cause property name mismatches unless getters, setters, or @JsonProperty are defined correctly.

Key Takeaways

  • Boolean fields starting with is can silently break Jackson mapping
  • Jackson relies on getter/setter naming, not field names
  • @JsonProperty fixes the issue explicitly
  • Best practice: avoid is prefix in DTO fields
  • Always check DTO design before debugging controllers

Final Advice

If your JSON looks correct but your DTO value is null:
👉 Check the getter and setter naming first.
This small detail can save hours of debugging in Spring Boot applications.

Top comments (0)