Spring从翻新中获取Null值

时间:2018-11-18 14:13:18

标签: java android spring retrofit

我正在尝试从过去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;
    }
}

2 个答案:

答案 0 :(得分:1)

比较响应和POJO类。 POJO类的实例变量必须与response中的实例变量相同。在您的情况下,名称1和名称2。如果它们是name1,则在响应中是name2(这意味着它们不是以大写字母开头,等等),或者不同,它将为您提供NullPointerException

答案 1 :(得分:0)

在JSON中,名称1和名称2最有可能与您的POJO和杰克逊具有不同的名称,当您使用@RequestBody注释参数时,它们在幕后使用而无法弄清楚,因此得到空值。检查您的json。

相关问题