Чтобы переопределить десериализаторы по умолчанию, вы можете использовать SimpleModule
. Также, если вы хотите расширить реализацию по умолчанию, вы можете расширить десериализаторы по умолчанию. В вашем случае вы можете расширить com.fasterxml.jackson.databind.deser.std.StringDeserializer
класс. См. Пример ниже:
import com.fasterxml.jackson.core.JsonParser;
import com.fasterxml.jackson.databind.DeserializationContext;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.fasterxml.jackson.databind.deser.std.StringDeserializer;
import com.fasterxml.jackson.databind.module.SimpleModule;
import java.io.IOException;
import java.util.StringJoiner;
public class JsonApp {
public static void main(String[] args) throws Exception {
SimpleModule stringModule = new SimpleModule("String Module");
stringModule.addDeserializer(String.class, new CustomStringDeserializer());
ObjectMapper mapper = new ObjectMapper();
mapper.registerModule(stringModule);
String json = "{\"firstName\":\" Tom \",\"lastName\":\" Long \"}";
CustomStringPojo customStringPojo = mapper.readValue(json, CustomStringPojo.class);
System.out.println(customStringPojo);
}
}
class CustomStringDeserializer extends StringDeserializer {
@Override
public String deserialize(JsonParser p, DeserializationContext ctxt) throws IOException {
String text = super.deserialize(p, ctxt);
//clean up value
return text.trim();
}
}
class CustomStringPojo {
private String firstName;
private String lastName;
// getters, setters, toString
}
Над отпечатками кода:
CustomStringPojo{firstName='Tom', lastName='Long'}