В моем устаревшем коде некоторые поля формы определяются нетрадиционным способом, например, с использованием символов подчеркивания и заглавных букв. Проблема в том, что новая версия загрузки Spring 4 ведет себя по-другому при рендеринге JSON В ответе регистр букв другой, см. этот пример, где я использую один и тот же DTO для версий 3 и 4, но ответ JSON отличается:
Код: Выделить всё
class Test {
public String getFirstName() {
return "name";
}
public String getLCG() {
return "2";
}
public String getLCG_MAP() {
return "3";
}
public String[] getPRTasks() {
return new String[]{"arr1"};
}
}
Код: Выделить всё
{
"firstName": "name",
"lcg": "2",
"lcg_MAP": "3",
"prtasks": [
"arr1"
]
}
Код: Выделить всё
{
"firstName": "name",
"LCG": "2",
"LCG_MAP": "3",
"PRTasks": [
"arr1"
]
}
Это свойство не решает проблему, с которой я столкнулся: Spring.jackson.use-jackson2-defaults=true
И есть другое решение, чтобы переопределить построитель карты Джексона, используя приведенный ниже код, но он не работает для вложенных полей:
Код: Выделить всё
@Bean
public JsonMapperBuilderCustomizer jsonCustomizer() {
return builder -> builder.propertyNamingStrategy(new ForceDecapitalizeStrategy());
}
public class ForceDecapitalizeStrategy extends PropertyNamingStrategies.NamingBase {
@Override
public String translate(String input) {
if (input == null || input.isEmpty()) {
return input;
}
int i = 0;
while (i < input.length()
&& Character.isUpperCase(input.charAt(i))) {
i++;
}
if (i > 1) {
return input.substring(0, i).toLowerCase()
+ input.substring(i);
}
return input;
}
}
Подробнее здесь: https://stackoverflow.com/questions/798 ... -v3-and-v4
Мобильная версия