代码之家  ›  专栏  ›  技术社区  ›  Yannick Mussche

无法通过webclient从api调用接收数据

  •  0
  • Yannick Mussche  · 技术社区  · 2 年前

    因此,我试图了解webclient,但我一直得到一个nullpointerexception,尽管我的测试工作正常,并且说该对象不是null。我还看到我的控制台连接到api。但是当我问这个值时,我得到了null。

    以下是我使用的两个对象:

    import com.fasterxml.jackson.annotation.JsonProperty;
    
    public class Data {
        @JsonProperty("message")
        private String message;
        @JsonProperty("status")
        private String status;
        
        
        public String getMessage() {
            return message;
        }
    
        public String getStatus() {
            return status;
        }
    
        
    }
    
    
    public class Foto {
        private Data data;
    
        public Data getData() {
            return data;
        }
    
        
    }
    
    

    然后在这里我有我的api调用,我把我的psvm放在控制台结果中:

            try {
            var test =  client.get()
                    .uri("https://dog.ceo/api/breeds/image/random")
                    .retrieve()
                    .bodyToMono(Foto.class)
                    .block();
            System.out.println(test.getData().getMessage());
        } catch (WebClientResponseException.NotFound ex) {
            ex.getMessage();
        }
            
            
        }
    

    但作为系统的控制台输出。出来println我一直在接收:线程“main”java中出现异常。lang.NullPointerException:无法调用“be.hi10.apiesTest.domain.Data.getMessage()”,因为“be.hi10.apiesTest.domain.Foto.getData()”的返回值为null 在be。hi10.A测试。API应用程序。main(ApiesTestApplication.java:31)

    我做错了什么?我应该收到一个表示图像url的字符串。

    1 回复  |  直到 2 年前
        1
  •  0
  •   Nemanja    2 年前

    请注意,api返回如下响应:

    {
    "message": "https://images.dog.ceo/breeds/collie-border/n02106166_346.jpg",
    "status": "success"
    }
    

    public class Foto {
        private Data data;
    
        public Data getData() {
            return data;
        }
    
        
    }
    

    为此,JSON必须如下所示:

    "data":{
         "message": "https://images.dog.ceo/breeds/collie-border/n02106166_346.jpg",
        "status": "success"
    }
    

    但事实并非如此,这就是为什么你的反序列化失败了,你得到了 NullPointerException .

    要使其工作,请将响应类型更改为 Data :

    var test =  client.get()
                    .uri("https://dog.ceo/api/breeds/image/random")
                    .retrieve()
                    .bodyToMono(Data.class)
                    .block();