一次初始化JsonB配置

时间:2019-09-14 13:09:56

标签: jax-rs quarkus

我正在使用ContextResolver<Jsonb>自定义Jsonb,如下例所示。

它可以正常工作,但是我看到每次调用都会调用该方法,这在我看来似乎是浪费性能。 ¿没有办法只初始化一次Jsonb吗?

    @Override
    public Jsonb getContext(Class type) {
        final JsonbConfig config = new JsonbConfig()
            .withDateFormat(dateFormat, Locale.getDefault())
            .withSerializers(
                new UserSerializer(),
                new PaperSerializer()
            );
        return JsonbBuilder.create(config);
    }

PS:我知道我可以使用@JsonbTypeSerializer设置序列化程序。我不是在寻找其他方法来进行相同的配置。

2 个答案:

答案 0 :(得分:1)

您需要自己将json的实例存储在上下文解析器中。出于安全考虑,可能带有易失性和经过双重检查的锁定。

我不完全确定这是错误还是功能(即您是否必须自行完成并在每次调用时将其委托给Jsonb来作为期望的行为)。

在此处查看实现:https://github.com/resteasy/Resteasy/blob/master/providers/json-binding/src/main/java/org/jboss/resteasy/plugins/providers/jsonb/AbstractJsonBindingProvider.java#L27

我将与RESTEasy开发人员联系。

答案 1 :(得分:1)

现在有了一种使用Quarkus定制JSON-B的新方法,在这里记录:https://quarkus.io/guides/rest-json-guide#configuring-json-support

因此,正确的答案是实现JsonbConfigCustomizer

以下内容适用于您的用例:

import io.quarkus.jsonb.JsonbConfigCustomizer;
import javax.inject.Singleton;
import javax.json.bind.JsonbConfig;
import javax.json.bind.serializer.JsonbSerializer;

@Singleton
public class MyJsonbConfigCustomizer implements JsonbConfigCustomizer {

    public void customize(JsonbConfig config) {
        config.withDateFormat(dateFormat, Locale.getDefault())
              .withSerializers(
                  new UserSerializer(),
                  new PaperSerializer()
        );
    }
}