Jackson XML - @JsonSerialize序列化程序运行时配置

时间:2016-07-26 04:42:22

标签: java json jackson

@JsonSerialize和JsonSerializer实现的所有示例都是similar以下内容。

public class JodaDateTimeJsonSerializer extends JsonSerializer<DateTime> {

    private static final String dateFormat = ("MM/dd/yyyy");

    @Override
    public void serialize(DateTime date, JsonGenerator gen, SerializerProvider provider)
            throws IOException, JsonProcessingException {

        String formattedDate = DateTimeFormat.forPattern(dateFormat).print(date);

        gen.writeString(formattedDate);
    }

}

它有一个类级变量,用于定义其运行时行为。这不能在运行时通过配置进行更改。

如何在属性上使用dateFormat时将@JsonSerialize(using = JodaDateTimeJsonSerializer.class)置于可配置属性之上?

现在,我正在考虑将它作为运行时应用程序在运行时设置的序列化程序实现上的静态非final属性。没有做出非常恰当的实施。编辑:理想的解决方案将允许我将〜(仅编辑:传入)所需的配置注入序列化程序,而不是从某些全局检索配置。

注意:我不想为这个属性创建一个新的数据类型(它们都是字符串),我不想创建一个自定义的bean序列化程序(它们可以在任何地方的任何String属性上注释)。因此,我也不能使用SimpleModule::addSerializer(class, serializer)方法,因为它们不应该添加到所有String属性中。

1 个答案:

答案 0 :(得分:0)

Hello一些ResourceBundle实现提供了缓存功能。这可以说在这种情况下查找类似日期格式的属性对您的应用程序没有性能影响,您可以直接在您的方法中查找。

为了使配置中的任何更改在运行时生效。您应该以特定间隔清除ResourceBundle缓存,或者在更新配置文件时清除它。这可以通过调用方法轻松实现:

ResourceBundle.clearCache();