SpringCloud 에서 Fegin 을 사용 하여 HTTP 인터페이스 호출

Fegin 프로필
Fegin 은 성명 식,모듈 화 된 Http 클 라 이언 트 로 HTTP 인 터 페 이 스 를 빠 르 고 우아 하 게 호출 할 수 있 습 니 다.SpringCloud 에서 Feign 클 라 이언 트 를 편리 하 게 만 들 수 있 습 니 다.인 터 페 이 스 를 설명 하고 해당 하 는 주 해 를 추가 하면 HTTP 인터페이스 호출 을 완성 할 수 있 습 니 다.
본 고 는 등록 센터 를 통합 하지 않 아 도 Fegin 의 부하 균형 을 사용 하지 않 기 때문에 더욱 간편 하고 재 활용 가능 한 Http 클 라 이언 트 로 이해 할 수 있 습 니 다.
예 를 들 어 설명 하 다.
SpringBoot 버 전:2.1.1.RELEASE
SpringCloud 버 전:Finchley.SR2
필요 POM 도입

        org.springframework.boot
        spring-boot-starter-parent
        2.1.1.RELEASE
    
    
        
            
            
                org.springframework.cloud
                spring-cloud-dependencies
                ${spring-cloud.version}
                pom
                import
            
        
    
    
        
            
                org.springframework.boot
                spring-boot-starter-web
        
    

Fegin 클 라 이언 트 정의
1、@FeignClient      Http   ,      ,      Spring    
  url:   http   url、  config:  fegin    
2、@PostMapping  @RequestMapping     ,   Post    ,      ,
          http       ,  url     ,        ContentType
3、http                   ,          。
package com.external.feign;

import java.util.List;
import java.util.Map;

import org.springframework.cloud.openfeign.FeignClient;
import org.springframework.web.bind.annotation.PostMapping;

import com.external.config.FormFeignConfig;
import com.external.dto.response.BaseBispDto;
import com.external.dto.response.NiftyRes;
import com.external.dto.response.ReportAnalyzesRes;
import com.external.dto.response.ReportSummaryRes;
import com.external.feign.rpc.BISPResponse;


@FeignClient(name="fegin-name", url="${http-url}" , configuration = FormFeignConfig.class)
public interface BispClient {
    
    /**
     * @Description 
     * @author zengzp
     */
    @PostMapping(value="/intf?method=XXXX", consumes = {"application/x-www-form-urlencoded"})
    public XXXXResponse saveSampleInfo(Map params);

    /**
     * @Description 
     * @author zengzp
     */
    @PostMapping(value="/intf?method=XXXX", consumes = {"application/x-www-form-urlencoded"})
    public XXXXResponse getNiftyDetectionResultReplenish(Map params); 

Fegin 설정 코드
로그 출력 정책 과 ContentType 에 대응 하 는 메시지 의 인 코딩 과 디 코딩 을 설정 합 니 다.
package com.external.config;

import org.springframework.beans.factory.ObjectFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.autoconfigure.http.HttpMessageConverters;
import org.springframework.cloud.openfeign.support.SpringDecoder;
import org.springframework.cloud.openfeign.support.SpringEncoder;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.Scope;

import feign.Logger;
import feign.codec.Decoder;
import feign.codec.Encoder;
import feign.form.FormEncoder;

@Configuration
public class FormFeignConfig {
    @Autowired
    private ObjectFactory messageConverters;

    @Bean
    Logger.Level feignLoggerLevel() {
        return Logger.Level.BASIC;
    }
    
    @Bean
    @Scope("prototype")
    Decoder decoder() {
        return new AllinpayDecoder(new SpringDecoder(messageConverters));
    }
    
    @Bean
    @Scope("prototype")
    Encoder encoder(){
        return new FormEncoder(new SpringEncoder(this.messageConverters));
    }
}

통합 응답 DTO
package com.external.feign.rpc;

import org.springframework.http.HttpStatus;

import com.external.common.dto.BaseDto;


public class XXXXResponse extends BaseDto {
    /**
     * 
     */
    private static final long serialVersionUID = 1L;
    private String code;
    private String msg;
    private Long total;
    private T rows;
}

서 비 스 를 시작 할 때 설정 클래스 에@EnableFeignClient 를 추가 해 야 합 니 다.

좋은 웹페이지 즐겨찾기