2017-11-21 25 views
0

json 응답을 역 직렬화 한 후에 null 객체 속성이 있습니다. 안드로이드로 개발 중입니다. retrofit2, 변환기 (https://github.com/kamikat/moshi-jsonapi)로 moshi를 사용하고 있습니다. 디버깅 할 때 json 응답을 완전히 검색 (null 특성 아님)했지만 비 직렬화가 실패했습니다. 대신 GSON을 사용해야합니까?moshi로 JSON API 응답의 비 직렬화

여기 내 json 전화 걸기에 사용 내 개조 빌더 없습니다 : (어떤 문제)

public static JsonServerInterface getSimpleClient(){ 

    Retrofit retrofit = new Retrofit.Builder() 
      .baseUrl(BASE_AUTH_URL)a 
      .addConverterFactory(MoshiConverterFactory.create()) 
      .build(); 
    JsonServerInterface webServer=retrofit.create(JsonServerInterface.class); 
    return webServer;  
} 

apijson 호출, 응답 (직렬화가 오류없이 실패) UserModelnull와 속성을 포함

signInCall.enqueue(new Callback<UserModel>(){ 
    @Override 
    public void onResponse 
    (Call<UserModel> call, Response<UserModel> response) 
    { 
    response.message(); 
    } 
} 

UserModel (필요에 따라 moshi가 있지만 뭔가 부족하다고 생각합니다) :

,
@JsonApi(type = "users") 
public class UserModel extends Resource { 

@Json(name = "auth-token") 
private String authToken; 
@Json(name = "firstname") 
private String firstname; 
@Json(name = "lastname") 
private String lastname; 
@Json(name = "email") 
private String email; 
@Json(name = "created-at") 
private String createdAt; 
@Json(name = "updated-at") 
private String updatedAt; 

private HasMany<ActivityModel> activities; 

내 내가 본 json 응답 HTTP 응답을 디버깅 할 때, 내가 어떤 trouve없이 검색하지만, 모시가 직렬화 짜증, 그리고 오류가 발생하지됩니다

{ 
    "data": { 
     "id": "21", 
     "type": "users", 
     "attributes": { 
      "auth-token": "t8S3BTqyPwN3T4QDMY1FwEMF", 
      "firstname": "aymen", 
      "lastname": "myself", 
      "email": "[email protected]", 
      "created-at": "2017-11-13T22:52:39.477Z", 
      "updated-at": "2017-11-13T23:21:09.706Z" 
     }, 
     "relationships": { 
      "activities": { 
       "data": [ 
        { 
         "id": "81", 
         "type": "activities" 
        } 
       ] 
      } 
     } 
    }, 
    "included": [ 
     { 
      "id": "81", 
      "type": "activities", 
      "attributes": { 
       "title": "activity 10", 
       "description": "how to draw a circle", 
       "start-at": "2017-11-13T23:06:13.474Z", 
       "duration": 10, 
       "created-at": "2017-11-13T23:06:32.630Z", 
       "updated-at": "2017-11-13T23:06:32.630Z" 
      }, 
      "relationships": { 
       "user": { 
        "data": { 
         "id": "21", 
         "type": "users" 
        } 
       } 
      } 
     } 
    ] 
} 
+0

당신의 UserModel이 JSON 구조 것을 일치하지 않습니다 도움이되기를 바랍니다. 그것은 내부 "속성"객체와 일치합니다. 모델 구조를 정렬하는 것으로 시작하는 것이 좋습니다. –

답변

0

내가 시간을 많이 후 해결책을 찾을 수 : 내가 "문서"대신 UserModel를 사용해야합니다

인터페이스 :

@POST("sign-in.json") 
    Call<Document> signIn(@Body Credentials credentials); 

갔지 n 개의 전화 :

signInCall.enqueue(new Callback<Document>(){ 
      @Override 
      public void onResponse(Call<Document> call, Response<Document> response) { 

그것이

+0

'Call '서명을 사용하면 추가 [변환기 팩토리] (https://gist.github.com/kamikat/baa7d086f932b0dc4fc3f9f02e37a485)를 추가해야합니다. – kamikat

+1

아, 고맙습니다. moshi json api에 직접 포함되지 않은 이유는 무엇입니까? 불안정한가 보지 않겠습니까? – aymenhs

+0

라이브러리를 Retrofit과 함께 사용하는 것이 일반적이지만, 라이브러리 자체는 Retrofit과 아무 관련이 없습니다. 테스트를 통해이 팩토리 파일에 대해 별도의 모듈을 제공하는 것이 좋습니다. – kamikat