La respuesta aceptada no funcionará para mi caso.
En mi caso, la clase no me pertenece. La clase problemática proviene de dependencias de terceros, por lo que no puedo simplemente agregar una @JsonProperty
anotación en ella.
Para resolverlo, inspirado en la respuesta de @burak anterior, creé una personalizada de la PropertyNamingStrategy
siguiente manera:
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);
}
});
Básicamente, lo que hace es, antes de serializar y deserializar, verifica en la clase de destino / fuente qué nombre de propiedad está presente en la clase, si es isEnabled
o enabled
propiedad.
En base a eso, el asignador serializará y deserializará el nombre de propiedad que existe.
isSuccess
,isIsSuccess
creo que el nombre del método debe ser