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デバッグモードで確認)