Procházet zdrojové kódy

fix: ResponseResultHandler 拦截 String 返回类型导致 ClassCastException

Controller 返回 String 时,ResponseBodyAdvice 将其包装为 R 对象,但
Spring 已选定 StringHttpMessageConverter,无法处理 R 类型。

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
skyline před 1 dnem
rodič
revize
9f09cd195c

+ 3 - 9
car-wash-common/src/main/java/com/kym/common/handler/ResponseResultHandler.java

@@ -4,6 +4,7 @@ import com.kym.common.R;
 import org.springframework.core.MethodParameter;
 import org.springframework.http.MediaType;
 import org.springframework.http.ResponseEntity;
+import org.springframework.http.converter.StringHttpMessageConverter;
 import org.springframework.http.server.ServerHttpRequest;
 import org.springframework.http.server.ServerHttpResponse;
 import org.springframework.web.bind.annotation.RestControllerAdvice;
@@ -17,17 +18,10 @@ import org.springframework.web.servlet.mvc.method.annotation.ResponseBodyAdvice;
 @RestControllerAdvice
 public class ResponseResultHandler implements ResponseBodyAdvice {
 
-
-    /**
-     * 判断是否执行beforeBodyWrite
-     *
-     * @param returnType    the return type
-     * @param converterType the selected converter type
-     * @return
-     */
     @Override
     public boolean supports(MethodParameter returnType, Class converterType) {
-        return true;
+        // String 返回类型由 StringHttpMessageConverter 处理,不能包装为 R,否则 ClassCastException
+        return converterType != StringHttpMessageConverter.class;
     }
 
     @Override

+ 5 - 4
car-wash-miniapp/src/main/java/com/kym/miniapp/controller/ParkingCouponController.java

@@ -10,6 +10,7 @@ import com.kym.service.ParkingCouponRecordService;
 import com.kym.service.UserService;
 import com.kym.service.WashOrderService;
 import com.kym.service.cache.KymCache;
+import com.kym.common.R;
 import jakarta.servlet.http.HttpServletResponse;
 import lombok.extern.slf4j.Slf4j;
 import org.springframework.beans.factory.annotation.Value;
@@ -112,8 +113,8 @@ public class ParkingCouponController {
      */
     @SaIgnore
     @GetMapping("/checkParkingCoupon")
-    public String checkParkingCoupon(@RequestParam String mobilePhone) {
-        return washOrderService.checkParkingCoupon(mobilePhone);
+    public R<String> checkParkingCoupon(@RequestParam String mobilePhone) {
+        return R.success(washOrderService.checkParkingCoupon(mobilePhone));
     }
 
     /**
@@ -121,8 +122,8 @@ public class ParkingCouponController {
      */
     @SaIgnore
     @GetMapping("/testLink")
-    public String testLink(@RequestParam String mobilePhone) {
-        return washOrderService.checkParkingCoupon(mobilePhone);
+    public R<String> testLink(@RequestParam String mobilePhone) {
+        return R.success(washOrderService.checkParkingCoupon(mobilePhone));
     }
 
     /**