Feign吃掉了Exception Message

Feign吃掉了Exception Message

eat

0. 前言

最近开始使用Feign框架代替Resttemplate,Feign框架初衷是用于给Spring Cloud通讯使用的,虽然项目不是微服务,但我们也慢慢转为使用Feign,好处就是简洁方便,省去了很多的封装。

在开发中遇到一个问题,请求外部一个接口,对方服务抛出异常信息(json string),笔者捕获后将异常信息返回给前端提示用户,但却走到了兜底的异常信息处理逻辑,排查后发现是服务返回的 异常信息被截断 了,导致JSON格式化异常,没有正常解析异常信息。

1. 模拟

1.1 服务端

写一个简单的服务接口吧,如果入参是exception,抛出一个异常。

import cn.horizon.nile.dto.CommonResponseDTO;
import lombok.extern.slf4j.Slf4j;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;

/**
 * Copyright: Horizon
 *
 * @ClassName SimpleController
 * @Description controller
 * @Author Nile (Email:576109623@qq.com)
 * @Date 16:50 2024-7-20
 * @Version 1.0.0
 */
@Slf4j
@RequestMapping("/api/v1/simple")
@RestController
public class SimpleController {
   
    /**
     * 检索
     * @author Nile (Email:576109623@qq.com)
     * @date 17:11 2024-7-20
     * @param keyword 关键词
     * @return 结果
     */
    @GetMapping("/search")
    public CommonResponseDTO<Void> search(@RequestParam("keyword") String keyword) {
   
        log.info(keyword);
        // 如果入参是exception,抛出一个异常
        if ("exception".equals(keyword)) {
   
            throw new RuntimeException("Spring Cloud OpenFeign是一种基于Spring Cloud的声明式REST客户端,它简化了与HTTP服务交互的过程。它将REST客户端的定义转化为Java接口,并且可以通过注解的方式来声明请求参数、请求方式、请求头等信息,从而使得客户端的使用更加方便和简洁。同时,它还提供了负载均衡和服务发现等功能,可以与Eureka、Consul等注册中心集成使用。Spring Cloud OpenFeign能够提高应用程序的可靠性、可扩展性和可维护性,是构建微服务架构的重要工具之一。");
        }
        // 返回个成功码
        return new CommonResponseDTO<>("SUC000");
    }
}

响应体

import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;

/**
 * Copyright: Horizon
 *
 * @ClassName CommonResponseDTO
 * @Description 响应体
 * @Author Nile (Email:576109623@qq.com)
 * @Date 0:12 2024-7-23
 * @Version 1.0.0
 */
@Data
@AllArgsConstructor
@NoArgsConstructor
public class CommonResponseDTO<T> {
   
    /**
     * 响应码
     */
    private String code;
    /**
     * 提示信息
     */
    private String message;
    /**
     * 数据
     */
    private T data;

    public CommonResponseDTO(String code) {
   
        this.code = code;
    }

    public CommonResponseDTO(String code, String message) {
   
        this.code = code;
        this.message = message;
    }
}

全局异常处理器,这里HTTP响应码返回500,发现如果异常情况下响应码是2XX,Feign其实是不会当做error处理的。

import cn.horizon.nile.dto.CommonResponseDTO;
import lombok.extern.slf4j.Slf4j;
import org.springframework.http.HttpStatus;
import org.springframework.web.bind.annotation.ExceptionHandler;
import org.springframework.web.bind.annotation.ResponseStatus;
import org.springframework
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值