如何向bean类添加非属性?

问题描述 投票:0回答:1

我的课程有很多字段,每个字段都有一个 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
对其进行注释,但这没有帮助......

java jackson annotations bean-validation
1个回答
0
投票

感谢@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; }

© www.soinside.com 2019 - 2024. All rights reserved.