我正在使用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
设置序列化程序。我不是在寻找其他方法来进行相同的配置。
答案 0 :(得分:1)
您需要自己将json
的实例存储在上下文解析器中。出于安全考虑,可能带有易失性和经过双重检查的锁定。
我不完全确定这是错误还是功能(即您是否必须自行完成并在每次调用时将其委托给Jsonb
来作为期望的行为)。
我将与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()
);
}
}