我的课程有很多字段,每个字段都有一个 getter 和 setter。我们现在需要向其中一些方法添加 logging,因此我添加了新的
logger
字段:
@JsonIgnoreProperties(ignoreUnknown = true)
public class Foo {
private static final Logger logger = LoggerFactory.getLogger(Foo.class);
@JsonProperty("initialSize")
private String initialSize;
@JsonProperty("logAbandoned")
private String logAbandoned;
@JsonProperty("maxActive")
private String maxActive;
...
这编译得很好,但在运行时我得到一个异常:
Invalid property 'logger' of bean class [com.example.Foo]: Bean property 'logger' is not readable or has an invalid getter method: Does the return type of the getter match the parameter type of the setter?
有没有办法将新字段 -
logger
- 标记为豁免?我尝试用 @JsonIgnore
对其进行注释,但这没有帮助......
感谢@AndrewL 的提示。问题出在其他地方的“我们自己的”代码,它试图在此类的不同对象之间复制属性。我添加了一个检查来跳过 static 字段并修复了它。
public T overwriteCommonProperties(T target, T in) {
if (in == null || target == null ||
target.getClass() != in.getClass()) return null;
final BeanWrapper src = new BeanWrapperImpl(in);
final BeanWrapper trg = new BeanWrapperImpl(target);
for (final Field property : target.getClass().getDeclaredFields()) {
if (Modifier.isStatic(property.getModifiers()))
continue;
Object providedObject = src.getPropertyValue(property.getName());
Object targetObject = trg.getPropertyValue(property.getName());
if (providedObject != null && null == targetObject &&
!(providedObject instanceof Collection<?>)) {
trg.setPropertyValue(
property.getName(),
providedObject);
}
}
return target;
}