Java 从Android 2发布嵌套对象,服务器接收子元素null
使用Reformation2向服务器发布嵌套对象(SpringFramework)。服务器可以读取第一级属性,但列表属性为空 检查子元素(列表)是否在Android应用程序上通过2在post之前设置了object Android端(改型2调用服务器API):Java 从Android 2发布嵌套对象,服务器接收子元素null,java,android,post,retrofit2,nested-object,Java,Android,Post,Retrofit2,Nested Object,使用Reformation2向服务器发布嵌套对象(SpringFramework)。服务器可以读取第一级属性,但列表属性为空 检查子元素(列表)是否在Android应用程序上通过2在post之前设置了object Android端(改型2调用服务器API): @POST(“休息/上传”) @标题(“内容类型:application/json;字符集=UTF-8”) 调用uploadRecords(@Body UploadRequest UploadRequest); Android端(上传请求
@POST(“休息/上传”)
@标题(“内容类型:application/json;字符集=UTF-8”)
调用uploadRecords(@Body UploadRequest UploadRequest);
Android端(上传请求对象):
public类UploadRequest扩展了AbsRestRequest{
@暴露
列表ListOfFlatenAttributesObject;
公共列表getListOfFlatenAttributesObject(){
返回ListOfFlatenAttributesObject;
}
public void setListOfFlatenAttributesObject(列表listOfFlatenAttributesObject){
ListOfFlatenAttributesObject=ListOfFlatenAttributesObject;
}
}
Java服务器端代码(UploadRequest对象):
public类UploadRequest扩展了AbsRestRequest{
私有ArrayList ListOfFlatenAttributesObject;
}
Java服务器端代码(控制器):
@RequestMapping(value=“/upload”,method=RequestMethod.POST,consumes=“application/json”,products=“application/json”)
@ResponseStatus(值=HttpStatus.OK)
@应答器
公共响应属性上载(@RequestBody uploadrequestobject){
UploadResponse=新的UploadResponse();
System.out.println(“\t”+requestObject.getActionType()+“\t”+AdmsUtils.date2Str(requestObject.getActionDateTime(),DateFormatConfig.getWebDateTime());
//可以读取AbsRestRequest中的字符串属性。
System.out.println(“\t FlatEnableAttribute对象的记录计数:”+(requestObject.getListOfFlatenAttributesObject()==null?0:requestObject.getListOfFlatenAttributesObject().size());
//requestObject.getListOfFlatenAttributesObject()的空对象
......
返回新的ResponseEntity(response,HttpStatus.OK);
}
为什么服务器上的requestObject.getListOfFlatenAttributesObject()读取为空?在发布之前,检查对象是否已在Android应用程序中设置。
(在Android Studio调试模式下选中)
问题已经解决。
根本原因在于服务器端编码。
类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;
}
}
public类UploadRequest扩展了AbsRestRequest{
@暴露
列表**l**istOfFlatenAttributesObject;
公共列表getListOfFlatenAttributesObject(){
返回**l**istOfFlatenAttributesObject;
}
public void setListOfFlatenAttributesObject(列表listOfFlatenAttributesObject){
listOfFlatenAttributesObject=listOfFlatenAttributesObject;
}
}
“ListOfFlatenAttributesObject”的第一个字母导致springframework无法识别属性。
它应该是“listOfFlatenAttributesObject”,问题已经解决
public class UploadRequest extends AbsRestRequest {
@Expose
List<FlatenAttributesObject> ListOfFlatenAttributesObject;
public List<FlatenAttributesObject> getListOfFlatenAttributesObject() {
return ListOfFlatenAttributesObject;
}
public void setListOfFlatenAttributesObject(List<FlatenAttributesObject> listOfFlatenAttributesObject) {
ListOfFlatenAttributesObject = listOfFlatenAttributesObject;
}
}
public class UploadRequest extends AbsRestRequest {
private ArrayList<FlatenAttributesObject> ListOfFlatenAttributesObject;
}
@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);
}
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;
}
}