美文网首页
feign去掉controller方法

feign去掉controller方法

作者: 定金喜 | 来源:发表于2020-05-23 14:03 被阅读0次

1.现状

目前搭建feign服务的步骤如下:(单机,不涉及到集群)
先写feign api接口

@FeignClient(name = "demo", url = "${feign.demo.server}", configuration = FeignConfig.class)
public interface QueryCorpService {

    /**
     * 根据渠道code查询企业
     *
     * @param request
     * @return
     */
    @RequestMapping(value = "/feign/demo/queryCorp/byChannel", method = RequestMethod.POST)
    FeignResult<QueryCorpResponse> queryCorpByChannel(@RequestBody CorpChannelRequest request);
}

application.yml配置:

feign:
  salary:
    demo: http://127.0.0.1:8080
    appId: feign_demo
    appSec: feign_secret

相关的核心类(部分):

@Configuration
public class FeignConfig {

    private static String appId;

    private static String appSec;

    @Bean
    public Contract feignContract() {
        return new Contract.Default();
   }

    @Bean
    public BasicAuthRequestInterceptor basicAuthRequestInterceptor() {
        return new BasicAuthRequestInterceptor(appId, appSec);
    }

    public String getAppId() {
        return appId;
    }

    @Value("${feign.demo.appId}")
    public void setAppId(String appId) {
        SalaryFeignConfig.appId = appId;
    }

    public String getAppSec() {
        return appSec;
    }

    @Value("${feign.demo.appSec}")
    public void setAppSec(String appSec) {
        SalaryFeignConfig.appSec = appSec;
    }
}
@Data
public class CorpChannelRequest {

    private String channel;

    private String channelCode;

    private String startTime;

    private String endTime;

    private Integer pageSize;

    private Integer page;

    private Integer totalCount;
}

编写controller:

 @Resource
    private QueryCorpService queryCorpService;

    @RequestMapping(value = "/feign/salary/queryCorp/byChannel", method = RequestMethod.POST)
    FeignResult<QueryCorpResponse> queryCorpByChannel(@RequestBody CorpChannelRequest request){
        
        return queryCorpService.queryCorpByChannel(request);
    }
@Primary
@Service
public class QueryCorpServiceImpl implements QueryCorpService {

    @Resource
    private AthenaCorpClient athenaCorpClient;

    @Resource
    private SalaryConfigDAO salaryConfigDAO;

    @Override
    public FeignResult<QueryCorpResponse> queryCorpByChannel(@RequestBody CorpChannelRequest request) {
        QueryCorpResponse response = new QueryCorpResponse();
        if (request != null) {
            CorpChannelQuery query = new CorpChannelQuery();
            query.setChannel(request.getChannel());
            query.setChannelCode(request.getChannelCode());
            query.setPage(request.getPage());
            query.setPageSize(request.getPageSize());

            ...
        }
        return FeignResult.getSuccessResult(response);
    }
}

2.需要改进点

对于每个feign接口,都需要写相同的controller层接口,接口少还可以接受,但是遇到大量的接口,工作量较大,而且接口改动时还需要改controller层和seviceImpl实现层,影响后面的维护工作,引入代理工具类解决此问题
增加依赖:

<dependency>
       <groupId>com.github.leecho</groupId>
       <artifactId>spring-cloud-starter-feign-proxy</artifactId>
       <version>0.0.1-SNAPSHOT</version>
</dependency>

去掉代码

 @Bean
    public Contract feignContract() {
        return new Contract.Default();
   }

移除controller层代码即可,非常方便

相关文章

网友评论

      本文标题:feign去掉controller方法

      本文链接:https://www.haomeiwen.com/subject/kdxqahtx.html