我有以下代码将joda的LocalDate序列化为字符串:

public class JodaDateSerializer extends JsonSerializer<ReadablePartial> {
    private static final String dateFormat = ("yyyy-MM-dd");
    @Override
    public void serialize(ReadablePartial date, JsonGenerator gen, SerializerProvider provider)
            throws IOException, JsonProcessingException {

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

        gen.writeString(formattedDate);
    }
}


我这样使用它:

@JsonSerialize(using = JodaDateSerializer.class)
LocalDate sentDate;


我想通过dateformat模式例如(yyyy-MM-dd)声明为类时。

我以为使用泛型是这样的:

JodaDateSerializer<T>

T String;


但是我不确定如何在声明sendDate变量的地方使用它:

@JsonSerialize(using = JodaDateSerializer<???>.class)
LocalDate sentDate;


有什么帮助吗?

最佳答案

如果您使用jackson json解析器。您不能将附加参数传递给JsonSerialize注释,也不能将通用参数传递给JsonSerializer类。

我认为唯一的方法是为每个日期格式创建一个新的JsonSerializer子类,如下所示:

public abstract class JodaDateSerializer extends JsonSerializer<ReadablePartial> {

    protected abstract String getDateFormat();

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

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

        gen.writeString(formattedDate);
    }
}

public class LocalDateSerializer extends JodaDateSerializer {

    protected String getDateFormat(){
        return "yyyy-MM-dd";
    }

}

public class OtherDateSerializer extends JodaDateSerializer {

    protected String getDateFormat(){
        return "yyyy/MM/dd";
    }

}


然后为您的字段使用roper DateSerializer类。

@JsonSerialize(using = LocalDateSerializer.class)
LocalDate sentDate;

@JsonSerialize(using = OtherDateSerializer.class)
OtherDate otherDate;

08-26 18:52