0

Retrofit2 を使用して、ネストされたオブジェクトをサーバー (SpringFramework) に投稿します。サーバーは第 1 レベルの属性を読み取ることができますが、List 属性の場合は null です。

Android アプリで Retrofit2 を介して投稿する前に、サブ要素 (リスト) がオブジェクトを設定していることを確認しました。

Android 側 (Retrofit2 コール サーバー API):

@POST("rest/upload")
@Headers("Content-Type:application/json; charset=UTF-8")
Call<UploadResponse> uploadRecords(@Body UploadRequest uploadRequest);

Android 側 (UploadRequest オブジェクト):

public class UploadRequest extends AbsRestRequest {
    @Expose
    List<FlatenAttributesObject> ListOfFlatenAttributesObject;

    public List<FlatenAttributesObject> getListOfFlatenAttributesObject() {
        return ListOfFlatenAttributesObject;
    }
    public void setListOfFlatenAttributesObject(List<FlatenAttributesObject> listOfFlatenAttributesObject) {
        ListOfFlatenAttributesObject = listOfFlatenAttributesObject;
    }
}

Java サーバー側コード (UploadRequest オブジェクト):

public class UploadRequest extends AbsRestRequest {
    private ArrayList<FlatenAttributesObject> ListOfFlatenAttributesObject;
}

Java サーバー側コード (コントローラー):

@RequestMapping(value="/upload", method=RequestMethod.POST, consumes="application/json", produces="application/json")
@ResponseStatus(value = HttpStatus.OK)
@ResponseBody
public ResponseEntity<UploadResponse> Upload(@RequestBody UploadRequest requestObject) {
    UploadResponse response = new UploadResponse();

    System.out.println("\t" + requestObject.getActionType() + " \t" + AdmsUtils.date2Str(requestObject.getActionDateTime(), DateFormatConfig.getWebDateTime())); 
    //String attribute in AbsRestRequest can be read. 

    System.out.println("\tRecord Count of FlatenAttributesObject: " + (requestObject.getListOfFlatenAttributesObject()==null?0:requestObject.getListOfFlatenAttributesObject().size()));
    //Null object for requestObject.getListOfFlatenAttributesObject()

    ......
    return new ResponseEntity<UploadResponse>(response, HttpStatus.OK);
}

サーバーで requestObject.getListOfFlatenAttributesObject() が null として読み取られるのはなぜですか? 投稿前に Android アプリにオブジェクトが設定されていることを確認します。(Android Studioデバッグモードで確認)

4

1 に答える 1