JsonAnySetter에 대한 질문이 있습니다. 제목에 설명 된대로 proguard을 켤 때 내 JsonAnySetter 핸들러가 호출되지 않습니다. 프로 가드를 끄면 괜찮습니다. 다음은 테스트 코드 및 proguard 설정입니다. 분명히 JsonProperty 주석이 잘 작동하고 있습니다. 그것은 나의 proguard 구성에 의해 삭제되지 않습니다.Proguard를 켜면 JsonAnySetter가 호출되지 않습니다.
public class TestJson
{
public static class Item1
{
@JsonAnySetter
public void handleUnknown(String key, Object val)
{
System.out.println(String.format("unknown : %s - %s", key, val.toString()));
}
@JsonProperty("uid")
public long uid_ = 0;
public static void test()
{
ObjectManager m = new ObjectMapper();
m.setVisibilityChecker(....None...)
String j1 = "{\"uid\":5, \"pos\":5, \"kk\":888, \"attr\":5}";
Item1 item = (Item1) m.readValue(j1, Item1.class);
}
}
아래의 라인은 내가 사용한 프로 가드 구성입니다.
-dontobfuscate
-dontoptimize
-printusage
-dontwarn
-keepattributes *Annotation*,EnclosingMethod,Signature
-keepnames class com.fasterxml.jackson.** { *; }
-keepclassmembers enum * {
public static **[] values();
public static ** valueOf(java.lang.String);
}
-keep public class * extends android.app.Activity
-keep public class * extends android.app.Application
-keep public class * extends android.app.Service
-keep public class * extends android.content.BroadcastReceiver
-keep public class * extends android.content.ContentProvider
-keep public class com.android.vending.licensing.ILicensingService
-keepclasseswithmembernames class * {
native <methods>;
}
-keepclasseswithmembers class * {
public <init>(android.content.Context, android.util.AttributeSet);
}
-keepclasseswithmember class * {
public <init>(android.content.Context, android.util.AttributeSet, int);
}
-keep class * implements android.os.Parcelable {
public static final android.os.Parcelable$Creator *;
}
-keepclassmembers class * {
@fully.qualified.package.AnnotationType *;
}
-keep public class cca.news.TestJson.** { *; }
이 문제를 해결할 수있는 사람이 있습니까? proguard와 Jackson의 JsonAnySetter 처리기가 모두 필요합니다.