Jawaban yang diterima tidak akan berhasil untuk kasus saya.
Dalam kasus saya, kelas tersebut bukan milik saya. Kelas bermasalah berasal dari dependensi pihak ke-3, jadi saya tidak bisa hanya menambahkan @JsonProperty
anotasi di dalamnya.
Untuk mengatasinya, terinspirasi dari jawaban @burak di atas, saya membuat custom PropertyNamingStrategy
sebagai berikut:
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);
}
});
Pada dasarnya apa yang dilakukan ini adalah, sebelum membuat serial dan deserialisasi, ia memeriksa di kelas target / sumber nama properti mana yang ada di kelas, apakah itu isEnabled
atauenabled
properti.
Berdasarkan itu, mapper akan membuat serialisasi dan deserialisasi ke nama properti yang ada.
isSuccess
Anda seperti nama metode Anda harusisIsSuccess
saya pikir