คำตอบที่ยอมรับจะใช้ไม่ได้กับกรณีของฉัน
ในกรณีของฉันชั้นเรียนไม่ได้เป็นของฉัน คลาสที่มีปัญหามาจากการอ้างอิงของบุคคลที่สามดังนั้นฉันจึงไม่สามารถเพิ่ม@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);
}
});
โดยพื้นฐานแล้วสิ่งนี้คืออะไรก่อนที่จะทำให้เป็นอนุกรมและ deserializing จะตรวจสอบในคลาสเป้าหมาย / ซอร์สซึ่งมีชื่อคุณสมบัติอยู่ในคลาสไม่ว่าจะเป็นisEnabled
หรือenabled
คุณสมบัติ
จากนั้นผู้ทำแผนที่จะทำให้เป็นอนุกรมและดีซีเรียลไลซ์กับชื่อคุณสมบัติที่มีอยู่
isSuccess
เมธอดคุณต้องเป็นisIsSuccess
ฉันคิดว่า