首页 > 解决方案 > 具有 json-b 和私有属性可见性的 quarkus

问题描述

在 json-b 中,我可以使用自定义的PropertyVisibilityStrategy. 如果我使用以下内容,quarkus 的行为是什么:

import java.lang.reflect.Field;
import java.lang.reflect.Method;

import javax.json.bind.config.PropertyVisibilityStrategy;

/**
 * Enables private property visibility 
 * and disables method visibility for JSON-B processings.
 */
public final class PrivateVisibilityStrategy implements PropertyVisibilityStrategy {

    @Override
    public boolean isVisible(Field field) {
        return true;
    }

    @Override
    public boolean isVisible(Method method) {
        return false;
    }
}

然后在我可以使用的课程上

@JsonbVisibility(value = PrivateVisibilityStrategy.class)
public class User {
// only fields are used for json mappings because of "PrivateVisibilityStrategy"
..
}

问题:

  1. quarkus 会在这种情况下使用反射吗(因为它必须使用字段访问)?

  2. 如果是,我应该避免在 quarkus 中出现这种情况以避免反射以提高性能吗?

  3. 我是否应该始终避免通过反射访问 quarkus 中的场?或者 quarkus 在幕后使用java.lang.invoke.MethodHandles这种情况吗?

标签: quarkus

解决方案


我能够使用这样的类来做到这一点:

@Singleton
public class JsonConfigurator implements JsonbConfigCustomizer {

    public void customize(JsonbConfig config) {
        config.withPropertyVisibilityStrategy(new PrivateVisibilityStrategy());
    }
}

PrivateVisibilityStrategy就像你发布的一样。


推荐阅读