Square Retrofit:转换byte []的异常

时间:2014-12-24 11:37:57

标签: exception byte retrofit

我正在使用Retrofit从我的WebAPI REST服务中获取一些数据。但是我的模型包含一个byte [],这会导致异常。

我收到的例外情况如下:

Caused by: retrofit.converter.ConversionException: com.google.gson.JsonSyntaxException: java.lang.IllegalStateException: Expected BEGIN_ARRAY but was STRING at line 1 column 122 path $.Photo

出现此异常是因为我的模型有一个名为Photo的byte []。

我的模特:

public class Artists {
    private long ID;
    private String Firstname;
    private String Lastname;
    private String Description;
    private String Countrycode;
    private byte[] Photo;
    private java.util.Date Born;
    private java.util.Date Death;
    private java.util.Date Edited;

我的REST API Java界面:

public interface ArtistRestService {
    @GET("/artist/{id}")
    Artists getArtist(@Path("id") long artistID);

    @GET("/artist")
    List<IdEditedRestObj> getArtists();
}

我知道我可以使用retrofit.mime.TypedByteArray,但我也使用GreenDA作为ORM映射器,我不想重构整个堆栈。

是否有一个简单的解决方法/解决方案,所以我可以以某种方式解析传入的json,以便不发生异常?

1 个答案:

答案 0 :(得分:0)

发现解决方案: 使用https://github.com/square/retrofit/blob/master/retrofit-converters/jackson/src/main/java/retrofit/converter/JacksonConverter.java

public RestService(String url){
        restAdapter = new RestAdapter.Builder()
                .setClient(new OkClient(getClient()))
                .setEndpoint(url)
                .setConverter(new JacksonConverter())
                .setErrorHandler(new RetrofitErrorHandler())
                .setLogLevel(RestAdapter.LogLevel.HEADERS_AND_ARGS)
                .build();
    }

现在一切正常,thx