springboot openfeign从JSON文件读取数据问题

时间:2022-04-10 10:30:27

openfeign不清楚的同学可以参考下我的这篇文章:springboot~openfeign从此和httpclient说再见

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

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

json帮助类,主要使用了objectmapper这个对象

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
/**
 * 将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文件的内容

?
1
2
3
4
5
6
7
8
9
10
11
12
13
@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文件读取数据问题,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对服务器之家网站的支持!

原文链接:https://www.cnblogs.com/lori/archive/2018/06/11/9166351.html