spring feign client exception handling

后端 未结 3 1707
慢半拍i
慢半拍i 2021-02-09 03:01

I have some fiegn client to send request other micro service.

@FeignClient(name=\"userservice\")
public interface UserClient {

    @RequestMapping(
                    


        
3条回答
  •  陌清茗
    陌清茗 (楼主)
    2021-02-09 03:34

    did you try to implement FallbackFactory on your feign client ?

    https://cloud.spring.io/spring-cloud-netflix/multi/multi_spring-cloud-feign.html#spring-cloud-feign-hystrix-fallback

    On the create method, before return, you can retrieve the http status code with this snippet :

    String httpStatus = cause instanceof FeignException ? Integer.toString(((FeignException) cause).status()) : "";
    

    Exemple :

    @FeignClient(name="userservice", fallbackFactory = UserClientFallbackFactory.class)
    public interface UserClient {
    
        @RequestMapping(
                method= RequestMethod.GET,
                          path = "/userlist")
        String getUserByid(@RequestParam(value ="id") String id);
    
    }
    
    
    @Component
    static class UserClientFallbackFactory implements FallbackFactory {
        @Override
        public UserClient create(Throwable cause) {
    
         String httpStatus = cause instanceof FeignException ? Integer.toString(((FeignException) cause).status()) : "";
    
         return new UserClient() {
            @Override
            public String getUserByid() {
                logger.error(httpStatus);
                // what you want to answer back (logger, exception catch by a ControllerAdvice, etc)
            }
        };
    }
    

    }

提交回复
热议问题