java - Spring 从 Retrofit 获取 Null 值

标签 java android spring retrofit

过去 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/

相关文章:

java - 无法删除 Eclipse 中的一些断点

android - 如何自定义列表首选项单选按钮

java - 令人困惑的双括号初始化数组

java - 我应该使用 @Scheduled 还是在休息 Controller 中 sleep ?

java - Spring Data JPA - 如何仅使用月份和日期从日期列中获取数据?

java - 功能修改数据库时是否可以使用功能标志/切换?

java - 关闭和回调

java - 获取java进程使用的内存

android - edittext.getdrawing 缓存不工作.Android

java - Spring MVC @RequestMapping注解中Path和Variable的区别