gpt4 book ai didi

java - 从 Android Retrofit2 发布嵌套对象,服务器接收子元素 null

转载 作者:行者123 更新时间:2023-12-02 00:45:49 28 4
gpt4 key购买 nike

使用 Retrofit2 将嵌套对象发布到服务器 (SpringFramework)。第一级属性可以被Server读取,但List属性为空。

在 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 服务器端代码( Controller ):

@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);
}

Why the requestObject.getListOfFlatenAttributesObject() read as null on Server? It is checked that the object has been set in Android App before post. (Checked on Android Studio debug mode)

最佳答案

该问题已得到解决。根本原因在于服务器端编码。UploadRequest类中的属性,变量首字母应小写。

public class UploadRequest extends AbsRestRequest {
@Expose
List<FlatenAttributesObject> **l**istOfFlatenAttributesObject;

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

ListOfFlatenAttributesObject”的第一个字母导致springframework无法识别属性。它应该是“listOfFlatenAttributesObject”并且问题已得到解决。

关于java - 从 Android Retrofit2 发布嵌套对象,服务器接收子元素 null,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57899179/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com