几个选项:
选项 1
继续使用您已经定义的单个字段。定义两个 get 方法并添加一个布尔标志来指示设置了哪个字段。根据此布尔标志从这些 get 方法中的每一个返回值:
private static class Person {
private String name;
private boolean isKey1;
public Person(String name, boolean isKey1) {
this.name = name;
this.isKey1 = isKey1;
}
public String getKey1() {
return isKey1 ? name : null;
}
public String getKey2() {
return isKey1 ? null : name;
}
}
Person p1 = new Person("abc", true);
Person p2 = new Person("xyz", false);
此选项不是首选,因为您有多个字段可以有条件地控制。
选项 2
定义两个字段和两个 getter 方法。设置相应 API 中的值之一。
private static class Person1{
private String key1;
private String key2;
public Person1(String key1, String key2){
this.key1 = key1;
this.key2 = key2;
}
public String getKey1(){
return this.key1;
}
public String getKey2(){
return this.key2;
}
}
Person1 p1 = new Person1("abc", null);
Person1 p2 = new Person1(null, "xyz");
选项 3
定义两个不同的 DTO 类。简洁明了。
注意事项:
在选项 1 和选项 2 中,由于其中一个值为 null,请执行以下操作之一:
在 application.properties 中添加以下内容:
spring.jackson.default-property-inclusion=non_null
在 DTO 类中添加如下注解:
@JsonInclude(JsonInclude.Include.NON_NULL)