使用 Retrofit2 将嵌套对象发布到服务器(SpringFramework)。服务器可以读取第一级属性,但列表属性为空。
检查子元素(列表)在通过 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() 在服务器上读取为空?在发布之前检查对象是否已在 Android 应用程序中设置。(在 Android Studio 调试模式下检查)