我正在尝试从过去2天开始通过Retrofit将Android的POST请求发送到Spring。我已经尝试了很多解决方案,但是似乎没有任何效果。因此,最后要求在这里能够获得一些帮助。
因此,我正在尝试通过改造将一个简单的Object从Android发送到Spring。从android方面来看,我已经验证了我发送的值,并且它给了我正确的值(我已经通过Android的调试模式对其进行了调试)。但是在春季,我得到了空值。
这是我的代码->
函数foo()->我从中发送请求的。
private void foo() {
request.setName1("XYZ");
request.setName2("PQR");
Api.upload(request, new Callback<BasicResponse>() {
@Override
public void onResponse(Call<BasicResponse> call, Response<BasicResponse> response) {
Log.d(TAG, "onResponse: Success" + response.toString());
}
@Override
public void onFailure(Call<BasicResponse> call, Throwable t) {
Log.d(TAG, "onResponse: Failure");
}
});
}
}
我的上传功能->
public static void upload(Request request, Callback<BasicResponse> callback) {
uploadRequest api = retrofit.create(uploadRequest.class);
Call<BasicResponse> call = uploadRequest.uploadCall(POJO);
call.enqueue(callback);
}
这是我的UploadRequest界面->
public interface uploadRequest{
@POST(UPLOAD_REQUEST)
Call<BasicResponse> uploadCall(@Body POJO pojo);
}
这是我的POJO班
public class POJO {
private String Name1;
private String Name2;
public String getName1() {
return Name1;
}
public void setName1(String name1) {
Name1 = name1;
}
public String getName2() {
return Name2;
}
public void setName2(String name2) {
Name2 = name2;
}
}
这是我的Spring Controller方法
@RequestMapping(value = "/UploadRequest",method = RequestMethod.POST,consumes = "application/json", produces = "application/json")
@ResponseBody
public void UploadImage(@RequestBody POJO pojo,HttpServletRequest request) {
if(pojo!=null){
System.out.println("pojo is not null");
System.out.println(pojo.getName1());
}
else{
System.out.println("null");
}
}
我得到的pojo不为null,并且在pojo.getName1()中,打印的值为null。
编辑:添加BasicResponse类。
public class BasicResponse {
private boolean success = Boolean.TRUE;
private ErrorCode errorCode;
private String response;
private Integer totalCount;
private String callingUserId;
public BasicResponse() {
super();
}
public boolean isSuccess() {
return success;
}
public void setSuccess(boolean success) {
this.success = success;
}
public ErrorCode getErrorCode() {
return errorCode;
}
public void setErrorCode(ErrorCode errorCode) {
this.errorCode = errorCode;
this.success = false;
}
public String getResponse() {
return response;
}
public void setResponse(String response) {
this.response = response;
}
public void setResponse(Object response) {
if (response != null) {
this.response = GsonUtils.toGson(response);
}
}
public Integer getTotalCount() {
return totalCount;
}
public void setTotalCount(Integer totalCount) {
this.totalCount = totalCount;
}
public String getCallingUserId() {
return callingUserId;
}
public void setCallingUserId(String callingUserId) {
this.callingUserId = callingUserId;
}
}
答案 0 :(得分:1)
比较响应和POJO类。 POJO类的实例变量必须与response中的实例变量相同。在您的情况下,名称1和名称2。如果它们是name1,则在响应中是name2(这意味着它们不是以大写字母开头,等等),或者不同,它将为您提供NullPointerException
。
答案 1 :(得分:0)
在JSON中,名称1和名称2最有可能与您的POJO和杰克逊具有不同的名称,当您使用@RequestBody注释参数时,它们在幕后使用而无法弄清楚,因此得到空值。检查您的json。