Опять же, это ответ на SO пользователей, которые происходят наткнуться на эту нить.
Хотя принятые ответ стенды принятые и действующие во всех его смысле - это не помогло мне в том случае, когда решение установить null
строковые значения в empty
строки пришли только после того, как мы сделали наши услуги доступными для iOS
клиентов.
Итак, около 30-40 pojo (увеличение) и их инициализация при создании экземпляра объекта, о котором идет речь, или в точке объявления было слишком много.
Вот как мы это сделали.
public class CustomSerializerProvider extends DefaultSerializerProvider {
public CustomSerializerProvider() {
super();
}
public CustomSerializerProvider(CustomSerializerProvider provider, SerializationConfig config,
SerializerFactory jsf) {
super(provider, config, jsf);
}
@Override
public CustomSerializerProvider createInstance(SerializationConfig config, SerializerFactory jsf) {
return new CustomSerializerProvider(this, config, jsf);
}
@Override
public JsonSerializer<Object> findNullValueSerializer(BeanProperty property) throws JsonMappingException {
if (property.getType().getRawClass().equals(String.class))
return Serializers.EMPTY_STRING_SERIALIZER_INSTANCE;
else
return super.findNullValueSerializer(property);
}
}
И сериализатор
public class Serializers extends JsonSerializer<Object> {
public static final JsonSerializer<Object> EMPTY_STRING_SERIALIZER_INSTANCE = new EmptyStringSerializer();
public Serializers() {}
@Override
public void serialize(Object o, JsonGenerator jsonGenerator, SerializerProvider serializerProvider)
throws IOException, JsonProcessingException {
jsonGenerator.writeString("");
}
private static class EmptyStringSerializer extends JsonSerializer<Object> {
public EmptyStringSerializer() {}
@Override
public void serialize(Object o, JsonGenerator jsonGenerator, SerializerProvider serializerProvider)
throws IOException, JsonProcessingException {
jsonGenerator.writeString("");
}
}
}
И, затем установите сериалайзер в ObjectMapper. (Джексон 2.7.4)
ObjectMapper nullMapper = new ObjectMapper();
nullMapper.setSerializerProvider(new CustomSerializerProvider());
Надеясь, это сэкономит кому-то какое-то время.
ОК это дубликат :-) http://stackoverflow.com/questions/5782284/how-to-serialize-in-jackson-json-null-string-to-empty-string – spa