Принятый ответ не сработает в моем случае.
В моем случае класс не принадлежит мне. Проблемный класс исходит из сторонних зависимостей, поэтому я не могу просто добавить @JsonProperty
в него аннотацию.
Чтобы решить эту проблему, вдохновившись ответом @burak выше, я создал следующий обычай PropertyNamingStrategy
:
mapper.setPropertyNamingStrategy(new PropertyNamingStrategy() {
@Override
public String nameForSetterMethod(MapperConfig<?> config, AnnotatedMethod method, String defaultName)
{
if (method.getParameterCount() == 1 &&
(method.getRawParameterType(0) == Boolean.class || method.getRawParameterType(0) == boolean.class) &&
method.getName().startsWith("set")) {
Class<?> containingClass = method.getDeclaringClass();
String potentialFieldName = "is" + method.getName().substring(3);
try {
containingClass.getDeclaredField(potentialFieldName);
return potentialFieldName;
} catch (NoSuchFieldException e) {
}
}
return super.nameForSetterMethod(config, method, defaultName);
}
@Override
public String nameForGetterMethod(MapperConfig<?> config, AnnotatedMethod method, String defaultName)
{
if(method.hasReturnType() && (method.getRawReturnType() == Boolean.class || method.getRawReturnType() == boolean.class)
&& method.getName().startsWith("is")) {
Class<?> containingClass = method.getDeclaringClass();
String potentialFieldName = method.getName();
try {
containingClass.getDeclaredField(potentialFieldName);
return potentialFieldName;
} catch (NoSuchFieldException e) {
}
}
return super.nameForGetterMethod(config, method, defaultName);
}
});
В основном, это то, что перед сериализацией и десериализацией он проверяет в целевом / исходном классе, какое имя свойства присутствует в классе, будь то свойство isEnabled
или enabled
свойство.
Исходя из этого, преобразователь будет сериализовать и десериализовать существующее имя свойства.
isSuccess
это,isIsSuccess
я думаю, имя вашего метода должно быть таким,