Как я могу получить код состояния HTTP данного URL через Spring? - PullRequest
0 голосов
/ 29 ноября 2018

Я работаю в классе Spring @Component и пытаюсь получить код состояния HTTP определенного URL-адреса для дальнейшей обработки.У меня есть функция следующим образом:

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, так и в веб-программировании в целом, поэтому я немного запутался, как действовать дальше.Я знаю, что «результат» возвращается как «Моно», но я не совсем понимаю, что такое «Моно», или как я мог бы преобразовать его во что-то с более удобными свойствами, даже если смотреть на «результат»."в отладчике не проливает свет на то, был ли HTTP-запрос действительно отправлен или был успешным:

enter image description here

Я неправильно вызываю веб-клиента?Или просто не удалось разобрать результирующие данные осмысленным способом?Будем весьма благодарны за любые предложения о том, как или где я мог бы узнать больше о базовых темах.

1 Ответ

0 голосов
/ 29 ноября 2018

Если вам нужен блокирующий способ, это легко сделать просто

@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 вместо веб-клиента ... рекомендуемый способ сделать это - не блокировать, что означаетВы должны вернуть 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 зависит от вашего кода ...

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...