簡體   English   中英

Spring WebClient - 故意返回錯誤請求

[英]Spring WebClient - Purposefully returning bad request

所以我有一個網絡客戶端:

public Mono<UserObject> getData(String id){
    return webClient.get()
        .uri(/user/getData)
        .header("header", header)
        .bodyValue(id)
        .retrieve()
        .bodyToMono(UserObject.class);
}

如果/user/getData返回錯誤請求,我希望 WebClient 也返回錯誤請求。 相反,WebClient 拋出一個內部服務器錯誤,說我有一個錯誤的請求。

執行 WebClient 時需要 output:

"status": 400,
"message" : "Bad Request"

實際 output:

"status": 500,
"message" : "org.springframework.web.reactive.function.client.WebClientResponseException$BadRequest: 400 Bad Request from GET .../user/getData"

也許您可以創建一個由異常觸發的錯誤處理程序,然后將 http 錯誤附加到響應中。 這個答案顯示了如何做到這一點。

您需要處理錯誤並返回相應的狀態

public Mono<UserObject> getData(String id){
    return webClient.post()
            .uri("/user/getData")
            .bodyValue(id)
            .retrieve()
            .bodyToMono(UserObject.class)
            .onErrorResume(e -> {
                if (e instanceof WebClientResponseException) {
                    var responseException = (WebClientResponseException) e;
                    
                    if (responseException.getStatusCode().is4xxClientError()) {
                        return Mono.error(new ResponseStatusException(responseException.getStatusCode()));
                    }
                }
                
                return Mono.error(e);
            });
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM