How can I declare a map variable using Generics, that has Class of X as Key, and the related Serializer of X as Value.
as example I want to have a Map that can contains:
K, V
BigDecimal.class, new BigDecimalSerializer()
LocalDate.class, new LocalDateSerializer()
Date.class, new DateSerializer()
Serializer example:
public class BigDecimalSerializer extends JsonSerializer<BigDecimal> {
@Override
public void serialize(BigDecimal value, JsonGenerator gen, SerializerProvider serializers) throws IOException {
gen.writeString(FormatUtils.format(value));
}
}
I tried Map<Class<?>, ? extends JsonSerializer<?>>
@Getter
@AllArgsConstructor
public class CsvWriterConfig {
private final Map<Class<?>, ? extends JsonSerializer<?>> serializers;
private final char separator;
}
but adding them to SimpleModule
SimpleModule module = new SimpleModule();
serializers.forEach(module::addSerializer);
gives me an error:
The type SimpleModule does not define addSerializer(Class<capture#5-of ?>, capture#4-of ? extends JsonSerializer<?>) that is applicable here
The SimpleModule addSerializer is:
public <T> SimpleModule addSerializer(Class<? extends T> type, JsonSerializer<T> ser)
{
_checkNotNull(type, "type to register serializer for");
_checkNotNull(ser, "serializer");
if (_serializers == null) {
_serializers = new SimpleSerializers();
}
_serializers.addSerializer(type, ser);
return this;
}