简体   繁体   中英

Springboot: Ignore null values in response optionally

There's a model class used by multiple APIs wherein if fields in this model class is null it is returned as null in the JSON response. However, another API is using the same model class and here the null fields should be omitted in the response.

Is there a way to achieve this without creating another copy of the model file and just to ingore the null fields with @JsonInclude(Include.NON_NULL)

Example,

class A {
 private String b;
 private String c;
 private String d;
 // getters and setters
}

Response 1 needed

"A": {
  "b": "val1",
  "c": null,
  "d": "val2"
}

Response 2 needed (omit values that are null)

"A": {
  "b": "val1",
  "d": "val2"
}

Is there a way to achieve these behaviors using a single model class? Some sort of config while instantiation or something?

After reading a lot of doc and code, both from blogs and here on SO, I'm tempted to say that the number of extra codelines and complexity required to achieve what you want, does not justify the effort.

With the example below, you'll get an extra class, but it is minimal. Use class A when you want to include null fields, else use class B.

@Data
public class A {
   private String b;
   private String c;
   private String d;
}

@JsonInclude(JsonInclude.Include.NON_NULL)
public class B extends A { }

When serializing these classes, JSON may look like this for class A

{
  "b": "val1",
  "c": null,
  "d": "val2"
}

and like this for Class B

{
  "b": "val1",
  "d": "val2"
}

If you are not using Lombok in your project yet, please add this to your POM in order to make @Data work:

    <dependency>
        <groupId>org.projectlombok</groupId>
        <artifactId>lombok</artifactId>
        <optional>true</optional>
    </dependency>

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM