google-http-java-client のパーサーとして Jackson 2 を使用しています。数値が String クラスのフィールドにマップされると、IllegalArgumentException
. この場合、整数1234
は文字列にマップされようとしてModel.b
います。ただし、文字列は整数フィールドにマップできます。これは int です"5678"
。Model.c
Caused by: java.lang.IllegalArgumentException: expected numeric type but got class java.lang.String
at com.google.api.client.json.JsonParser.parseValue(JsonParser.java:843)
... 22 more
JSON は次のようになります。
{
"a": "Something",
"b": 1234,
"c": "5678"
}
POJO は次のようなものです。
public class Model {
@Key String a;
@Key String b;
@Key int c;
}
それを解決する方法は?それとも、ジャクソンはこれを達成するためにカスタマイズされた解析を行うことができますか?
アップデート
RoboSpice ライブラリを使用して Android で使用しています。これはgradle構成です:
...
compile 'com.octo.android.robospice:robospice-google-http-client:1.4.14'
compile('com.google.http-client:google-http-client-jackson2:1.19.0') {
exclude module: 'xpp3'
exclude group: 'stax'
}
...
これは次の出力です./gradlew dependencies
:
WARNING: Dependency org.apache.httpcomponents:httpclient:4.0.1 is ignored for de
bug as it may be conflicting with the internal version provided by Android.
In case of problem, please repackage it with jarjar to change the class
packages
WARNING: Dependency org.apache.httpcomponents:httpclient:4.0.1 is ignored for re
lease as it may be conflicting with the internal version provided by Android.
In case of problem, please repackage it with jarjar to change the class
packages
WARNING [Project: :app] variant.getProcessResources() is deprecated. Call it on
one of variant.getOutputs() instead.
WARNING [Project: :app] variant.getProcessResources() is deprecated. Call it on
one of variant.getOutputs() instead.
:dependencies
------------------------------------------------------------
Root project
------------------------------------------------------------
No configurations
BUILD SUCCESSFUL
Total time: 13.873 secs