수락 된 답변이 제 경우에는 작동하지 않습니다.
제 경우 수업은 제가 소유 한 것이 아닙니다. 문제가있는 클래스는 타사 종속성에서 비롯되었으므로 @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
내가 생각 해야합니다