Reputation: 151
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?
Upvotes: 5
Views: 17682
Reputation: 10904
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>
Furthermore if you keep getting no arguments error you can use @SuperBuilder and @Data annotations on both entities instead
Upvotes: 3
Reputation: 305
Try to use Jackson package as follow:
import com.fasterxml.jackson.annotation.JsonInclude;
@JsonInclude(JsonInclude.Include.NON_NULL)
class A {
private String b;
private String c;
private String d;
// getters and setters
}
Upvotes: 1