java Firestore:嵌套类的字段没有setter/field

jtw3ybtb  于 2023-05-21  发布在  Java
关注(0)|答案(1)|浏览(124)

我有一个类MyOptional,它包含一个泛型对象,在本例中为Foo。我可以在日志中看到以下警告

No setter/field for present found on class MyOptional (fields/setters are case sensitive!)
No setter/field for empty found on class MyOptional (fields/setters are case sensitive!)
//The above two are static methods, and the below ones are fields in Foo
No setter/field for f1 found on class MyOptional
No setter/field for f2 found on class MyOptional
...as well as for all other fields

类看起来是这样的:

@Data
@NoArgsConstructor
@AllArgsConstructor
@JsonIgnoreProperties(ignoreUnknown = true)
public class MyOptional<T> {

  private static final FSOptional<?> EMPTY = new FSOptional<>(null);

  private T value;

  public static <T> FSOptional<T> empty() {
    return (FSOptional<T>) EMPTY;
  }

  public static <T> FSOptional<T> of(T t) {
    return new FSOptional<>(t);
  }

  public boolean isPresent() {
    return value != null;
  }

  public boolean isEmpty() {
    return value == null;
  }
}

@Data
@Builder
@NoArgsConstructor
@AllArgsConstructor
@JsonIgnoreProperties(ignoreUnknown = true)
public class Foo {
  private String f1;
  private String f2;
  ...
}

我可以在数据库中看到数据正在被保存,但是它确实显示了我的两个静态方法的结果/值(isEmpty()isPresent()用于MyOptional)。但是,我注意到db的基本对象是Foo而不是MyOptional...

我有默认的构造函数和setter和getter通过@NoArgsConstructor@Data,对于两个对象,所以我很困惑为什么我仍然看到这个警告...任何想法为什么和如何修复它?

rm5edbpk

rm5edbpk1#

我想明白了
我通过向每个方法com.google.cloud.firestore.annotation.Exclude添加以下注解来解决静态方法(isPresent和isEmpty)的警告。
至于其他字段的嵌套的其他警告,它与上述内容没有任何关系。之前,我将Foo对象直接存储在数据库中,但我将其更新为MyOptional<Foo>。我注意到,当第一次获取对象时,我看到每个字段的所有警告,但是,一旦对象更新为新类型,我就不再看到警告了。

相关问题