【问题标题】:Webclient ExchangeFilter not return a defined custom exception classWebclient ExchangeFilter 不返回定义的自定义异常类
【发布时间】:2021-08-28 18:49:22
【问题描述】:

当我向外部 api 发出 webclient 请求并且响应是 4xx 或 5xx 代码时,我遇到了问题。提议正在处理该响应并使用自定义类检索响应

webclient配置是

    return WebClient.builder()
                    .baseUrl(baseUrl)
                    .defaultHeaders(httpHeaders -> {
                        httpHeaders.setBearerAuth("token");
                        httpHeaders.add(HttpHeaders.CONTENT_TYPE, MediaType.APPLICATION_JSON_VALUE);
                    })
                    .filter(handlingFilter())
                    .build();
    
    
    }

handlingFilter.class

private static ExchangeFilterFunction handlingFilter() {
    return ExchangeFilterFunction.ofResponseProcessor(clientResponse -> {
        if(clientResponse.statusCode()!=null && (clientResponse.statusCode().is5xxServerError() || clientResponse.statusCode().is4xxClientError()) ) {
            return Mono.error(new MyException(clientResponse.statusCode().value(), clientResponse.statusCode().getReasonPhrase()));
        }else {
            return Mono.just(clientResponse);
        }
    });
}

MyExpcetion.class

public class MyException extends Exception{

    private int code;

    private String message;

    public MyException(String message) {
        super(message);
    }
}

但我的客户回复总是给我一个默认格式

{
  "timestamp": "x",
  "path": "x",
  "status": "x",
  "error": "x",
  "message": "x",
  "requestId": "x",
}

而不是

{
  "code": "x",
  "message": "x"
}

怎么了? 谢谢

【问题讨论】:

    标签: spring filter webclient


    【解决方案1】:

    要更改客户端的响应(端点的响应),您必须正确处理异常。查看有关Managing Exceptions的Spring文档

    恢复:如果您使用注释端点,则必须在 Controller 类或 @RestControllerAdvice 中创建 @ExceptionHandler(MyException.class)

    如果您使用的是功能端点,则配置WebExceptionHandler

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-12-30
      • 2019-05-07
      • 2014-07-07
      • 1970-01-01
      • 2017-03-11
      • 1970-01-01
      • 2010-10-02
      • 2021-08-24
      相关资源
      最近更新 更多