过去 2 天我试图通过 Retrofit 将 POST 请求从 Android 发送到 Spring。我已经尝试了很多关于此问题的解决方案,但似乎没有任何效果。所以,终于在这里问了,希望能得到一些帮助。
所以,我试图通过改造将一个简单的对象从 Android 发送到 Spring。从Android端,我已经验证了我发送的值,它给了我正确的值。(我已经通过Android的 Debug模式对其进行了调试)。但在 Spring 方面我得到了空值。
这是我的代码 ->
function 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 接口(interface) ->
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 is not 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;
}
}
最佳答案
比较响应和您的 POJO 类。 POJO 类的实例变量必须与响应中的相同。在您的情况下,Name1 和 Name2。如果响应中它们是 name1、name2(这意味着它们不以大写字母等开头)或不同,则会给出 NullPointerException
。
关于java - Spring 从 Retrofit 获取 Null 值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53361820/