springboot~openfeign从JSON文件读取数据

Posted 敢于对过去告一个段落,才有信心掀开新的篇章!

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了springboot~openfeign从JSON文件读取数据相关的知识,希望对你有一定的参考价值。

对openfeign不清楚的同学可以先看我这篇文章:springboot~openfeign从此和httpClient说再见

对于openfeign来说,帮助我们解决了服务端调用服务端的问题,你不需要关心服务端的URI,只需要知道它在eureka里的服务名称即可,同时你与服务端确定了服务方法的参数和返回值之后,我们可以在单元测试时mock这些服务端方法即可,真正做到了单元测试,而不需要与外界资源进行交互。

今天主要说一下在openfeign里读取JSON文件的问题,我们将测试所需要的数据存储到文件里,在修改时关注点比较单纯。

JSON帮助类,主要使用了objectMapper这个对象

 /**
   * 将json转换为对象.
   *
   * @param path 文件路径
   */
  public <T> T fromJson(String path, Class<T> cls) {
    try {
      return objectMapper.readValue(this.fromResource(path, Charsets.UTF_8), cls);
    } catch (Exception e) {
      throw new IllegalStateException("读取json失败:" + path, e);
    }
  }

  /**
   * 将json数组转换为对象列表.
   *
   * @param path 文件路径
   */
  public <T> List<T> listFromJson(String path, TypeReference typeReference) {
    try {
      return objectMapper.readValue(fromResource(path, Charsets.UTF_8), typeReference);
    } catch (Exception e) {
      throw new IllegalStateException("读取json失败:" + path, e);
    }
  }

在Mock类型中,可以使用这个方法读JSON文件的内容

@Configuration
@Profile("integTest")
public class ServiceClientMock  {
  @Bean
  public ServiceClient registerServiceClient() {
    AccountClient client = mock(AccountClient.class);
    when(client.del(
        anyString(),
        anyString(),
        anyString(),
        anyMap())).thenReturn(fromJson("order/orders.json", Map.class));
  }
}

上面代码主要在模拟了ServiceClient对象里的del方法,有三个字符型输入参数,返回值从JSON文件读取,在单元测试里,直接注入的是ServiceClientMock对象,我们

可以从@Profile注解里看到,它运行在integTest环境中,在生产环境里,将使用真正的服务。

感谢各位阅读!

以上是关于springboot~openfeign从JSON文件读取数据的主要内容,如果未能解决你的问题,请参考以下文章

SpringBoot引入openfeign 报错:spring-cloud-starter-openfeign:unknown

java springboot 引用openfeign 接口转发

干掉OpenFeign,SpringBoot 3.0 自带的 HTTP 客户端真香!

干掉OpenFeign,SpringBoot 3.0 自带的 HTTP 客户端真香!

Java 开源项目 OpenFeign —— feign 结合 SpringBoot

被SpringBoot整合OpenFeign坑惨了!!(建议收藏)