Я не могу найти правильный способ манипулирования регистром значения с помощью пользовательской аннотации, которой я могу управлять условно.
Я уже изучал онлайн-уроки Джексона с JsonFilters, сериализацией, десериализацией - большинство из них работали, но не с моим желаемым результатом.
Пользовательский сериализатор:
public class CaseSerializer extends JsonSerializer<String> {
private boolean myCheck;
public CaseSerializer() {
// default
}
public CaseSerializer(boolean myControl) {
this.myCheck = myControl;
}
@Override
public void serialize(String value, JsonGenerator generator, SerializerProvider provider) throws IOException {
if (value != null) {
if (myCheck) {
generator.writeString(value.toUpperCase());
} else {
generator.writeString(value);
}
}
}
}
Персона Модель:
public class Person {
@JsonSerialize(using = CaseSerializer.class)
private String title;
private String firstName;
private String lastName;
public Person(String title, String firstName, String lastName) {
this.title = title;
this.firstName = firstName;
this.lastName = lastName;
}
// getters, setters & toString
}
Использование:
Person person = new Person("dr", "john", "doe");
SimpleModule module = new SimpleModule();
module.addSerializer(String.class,new CaseSerializer(true));
ObjectMapper mapper = new ObjectMapper();
mapper.registerModule(module);
String titleShouldBeUpper = mapper.writeValueAsString(person);
System.out.println(titleShouldBeUpper);
После запуска предоставленного кода я ожидаю, чтополе title внутри класса Person должно быть прописным, а остальные значения должны оставаться такими, как они были.
(CaseSerializer (true) означает, что я хочу прописать значения в верхнем регистре)
Это не так, поскольку код выводит следующий вывод:
{"title":"dr","firstName":"JOHN","lastName":"DOE"}
Когда я запускаюкод с CaseSerializer () без логического myControl, установленного в true, ожидаемый результат - ни одно из полей не является заглавными.
Что и происходит:
{"title":"dr","firstName":"john","lastName":"doe"}
Это означает, чтопо умолчанию ничего не изменится.
Если я вызываю маппер с истинным значением для сериализации регистра, мне нужны только поля, в которых присутствует JsonSerialize (используя = CaseSerializer.class).
Есть идеи?