如何通过Spring获取给定URL的HTTP状态代码?

时间:2018-11-29 15:43:36

标签: spring kotlin

我正在使用Spring @Component类,并且试图获取特定URL的HTTP状态代码以进行进一步处理。我的功能如下:

fun getStatus() : String
   { 
        val webClient = WebClient.create("https://stackoverflow.com")
        val result = webClient.get()
                .exchange().map { res -> res.rawStatusCode() }

        println(result)
        return "statusGotten"
   }

但是,我没有得到状态码的Int值(例如200或401),而是得到了“ MonoMap”。

总体而言,我对Spring和Web编程都是陌生的,所以我对如何从此处开始感到困惑。我知道“结果”将作为“单声道”返回,但是我不清楚“单声道”是什么,或者如何将其转换为具有更可伸缩属性的东西,甚至看不到“结果”调试器中的“”并没有说明HTTP请求是实际发送还是成功发送:

enter image description here

我给网络客户端打电话不正确吗?还是仅仅是无法以有意义的方式解析结果数据?任何关于如何或在哪里可以学习有关基础主题的建议也将不胜感激。

1 个答案:

答案 0 :(得分:0)

如果您需要使用阻止方法来轻松完成此操作

@Test
public void myTest(){

    WebClient client = WebClient.builder().baseUrl("https://stackoverflow.com/").build();

    ClientResponse resp = client
        .get()
        .uri("questions/")
        .exchange()
        .block();   

    System.out.println("Status code response is: "+resp.statusCode());
}

但是为此,您可以直接使用RestTemplate代替webclient ...推荐的方法是不阻塞,这意味着您应该返回状态为Mono的对象,并在方法外使用,例如:

public Mono<HttpStatus> myMethod(){

    WebClient client = WebClient.builder().baseUrl("https://stackoverflow.com/").build();

    return client
        .get()
        .uri("questions/")
        .exchange()
        .map( clientResp -> clientResp.statusCode());   
}

使用此Mono的方式取决于您的代码...