From 9c785a675cfbe8a84be0b70e4810257bbbf3a413 Mon Sep 17 00:00:00 2001 From: Peanut Date: Wed, 3 Jun 2026 22:39:20 +0800 Subject: [PATCH] =?UTF-8?q?feat(wechat):=20=E6=96=B0=E5=A2=9E=20WechatResp?= =?UTF-8?q?onseErrorHandler?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 继承 DefaultResponseErrorHandler - 显式重写 hasError() 委托父类判断(4xx/5xx) - handleError() 仅记录日志不抛异常 - 不在 handler 读 body(避免流消费,由 LoggingInterceptor 统一处理) --- .../config/WechatResponseErrorHandler.java | 35 +++++++++++++++++++ 1 file changed, 35 insertions(+) create mode 100644 backend-single/src/main/java/com/emotion/config/WechatResponseErrorHandler.java diff --git a/backend-single/src/main/java/com/emotion/config/WechatResponseErrorHandler.java b/backend-single/src/main/java/com/emotion/config/WechatResponseErrorHandler.java new file mode 100644 index 0000000..ed88a6a --- /dev/null +++ b/backend-single/src/main/java/com/emotion/config/WechatResponseErrorHandler.java @@ -0,0 +1,35 @@ +package com.emotion.config; + +import lombok.extern.slf4j.Slf4j; +import org.springframework.http.client.ClientHttpResponse; +import org.springframework.web.client.DefaultResponseErrorHandler; + +import java.io.IOException; + +/** + * 微信 API 错误处理器 + * + *

设计要点: + *

    + *
  1. 显式重写 hasError() 委托父类判断(4xx/5xx → true),让 handleError() 在错误时被调用
  2. + *
  3. handleError() 不抛 RestClientException,由业务层(WechatMiniProgramServiceImpl) + * 根据 status code 判断如何处理
  4. + *
  5. 不在此处读 body(避免流消费,由 LoggingInterceptor 统一处理日志)
  6. + *
+ */ +@Slf4j +public class WechatResponseErrorHandler extends DefaultResponseErrorHandler { + + @Override + public boolean hasError(ClientHttpResponse response) throws IOException { + // 委托父类 DefaultResponseErrorHandler.hasError():4xx/5xx 返回 true,其他返回 false + return super.hasError(response); + } + + @Override + public void handleError(ClientHttpResponse response) throws IOException { + // 不抛异常;body 已在 LoggingInterceptor 中读取并脱敏记录 + // 业务层会通过 response.getStatusCode() 判断 + log.warn("[WeChatAPI] HTTP error response, status={}", response.getStatusCode()); + } +}