0

我在我的代码中使用供应商来调用 restTemplate 并在有异常时制作自定义消息..

但是,我的消息是,我需要通过我的 requestCall 获取信息,但是当我提出请求时,java thow 错误


...

我的代码:

public void execute() {
    HttpHeaders headers = buildDefaultHeaders();
    UriBuilder uri = UriBuilder.fromUri(wdd3dGatewayEndpoint + API_URL);
    HttpEntity request = new HttpEntity(headers);
    this.executeRequest(() -> restTemplate.exchange(uri.build(), HttpMethod.DELETE, request, Void.class));
}

我的供应商

protected ResponseEntity executeRequest(Supplier<ResponseEntity> request) {
    try {
        ResponseEntity response = request.get();
        updateSessionToken(response);
        return response;
    } catch (HttpClientErrorException | HttpServerErrorException e) {
        String msg = "WDD3D-Error in service communication<br>" + e.getResponseBodyAsString();
        throw new MaestroException(msg);
    }
}

现在,我尝试强制转换以获取 URL ...

protected ResponseEntity executeRequest(Supplier<ResponseEntity> request) {
    try {
        ResponseEntity response = request.get();
        updateSessionToken(response);
        return response;
    } catch (HttpClientErrorException | HttpServerErrorException e) {

        //THROW EXEPTION HERE... PLEASE HELP...
        RequestEntity requestEntity = (RequestEntity) request;
        
        String url = requestEntity.getUrl().toString();
        String msg = "WDD3D-Error in service communication<br>" + e.getResponseBodyAsString();
        throw new MaestroException(msg);
    }
}]
4

3 回答 3

1

您应该使用 的get()方法Supplier,请参阅文档中的更多内容。

于 2021-11-07T18:21:49.957 回答
1
    RequestEntity requestEntity = (RequestEntity) request;

您正在尝试将 aSupplier<ResponseEntity>转换为 a RequestEntity。这是两个非常不同的类别,这样的演员阵容永远不会奏效。

也许您想调用request.get()并从ResponseEntity您拥有的 URL 中获取 URL。

在评论中告诉我它是否适合您,或者我们需要进一步调试?

于 2021-11-07T18:22:48.013 回答
0

您试图从 中获取的唯一内容是 URL,因为它不是,所以RequestEntity您无法从 中获取,那么为什么不将 URL 作为另一个参数传递给?然后它将具有记录错误所需的附加信息。Supplier<ResponseEntity>RequestEntityexecuteRequest

于 2021-11-07T20:58:39.480 回答