Cucumber 6.9 java8,无法从DataTable转换为自定义类型

Cucumber 6.9 java8,无法从DataTable转换为自定义类型,cucumber,cucumber-jvm,cucumber-java,Cucumber,Cucumber Jvm,Cucumber Java,我想注册我的自定义类型,以便从datatable自动获取列表 尽管有许多源代码引用了TypeRegistryConfigurer类,但在最新的cucumber核心版本中,这似乎被弃用 我试着看,所以我做了这个: 公共类BurpStepDefs实现{ 私有静态ObjectMapper ObjectMapper=新ObjectMapper(); 私有静态最终DataTableType条目= 新的DataTableType(CartInput.Article.class,(java.util.Map条

我想注册我的自定义类型,以便从datatable自动获取列表

尽管有许多源代码引用了TypeRegistryConfigurer类,但在最新的cucumber核心版本中,这似乎被弃用

我试着看,所以我做了这个:

公共类BurpStepDefs实现{
私有静态ObjectMapper ObjectMapper=新ObjectMapper();
私有静态最终DataTableType条目=
新的DataTableType(CartInput.Article.class,(java.util.Map条目)->
convertValue(entry,CartInput.Article.class));
私有最终DataTableTypeRegistry注册表=新DataTableTypeRegistry(Locale.ENGLISH);
公共负荷调节器(){
registry.defineDataTableType(条目);
给定(“打嗝”),()->{
});
当(“打嗝”时,(数据表o)->{
o、 asList(CartInput.Article.class);//出错
});
然后(“打嗝”,(数据表o)->{
});
}
}
这是功能文件

Feature: operate with customer cart
  Verify all cart operations

  Scenario: scenario burp
    Given burped
    When burping
      | BIRP        | 1 |
      | BYRP        | 1 |
    Then I burp
      | BIRP        | 1 |
      | BYRP        | 1 |
我得到以下错误:

Can't convert DataTable to List<it.infocert.ecommerce.checkout.model.CartInput$Article>.
Please review these problems:

 - There was no table entry or table row transformer registered for it.infocert.ecommerce.checkout.model.CartInput$Article.
   Please consider registering a table entry or row transformer.

 - There was no default table entry transformer registered to transform it.infocert.ecommerce.checkout.model.CartInput$Article.
   Please consider registering a default table entry transformer.

Note: Usually solving one is enough
无法将数据表转换为列表。
请审查这些问题:
-没有为其注册的表条目或表行转换器。infocert.ecommerce.checkout.model.CartInput$Article。
请考虑登记表条目或行变压器。
-没有注册默认的表条目转换器来转换它。infocert.ecommerce.checkout.model.CartInput$Article。
请考虑注册默认表条目转换器。
注:通常解决一个问题就足够了
有什么提示吗

编辑

在阅读@M.p.Korstanje和(起初我认为docs不受欢迎)之后,我解决了这个问题:

DataTableType((java.util.List条目)->{
最终var输出=new CartInput.Article();
output.setName(entry.get(0));
output.setQuantity(Integer.parseInt(entry.get(1));
输出.setOperationId(“A”);
返回输出;
});

您正在使用Cucumbers内部API中的位和位。然而,黄瓜lambda DSL的全部包含在
En
接口中(及其父接口
LambdaGlue
)。因此,要定义单个数据表条目转换器,您需要执行以下操作:

公共类BurpStepDefs实现{
私有静态ObjectMapper ObjectMapper=新ObjectMapper();
公共负荷调节器()
数据表类型(
(映射条目)->objectMapper.convertValue(条目,CartInput.Article.class));
}
}

如果您使用的是现代IDE,您还可以在构造函数中键入
这个。
并触发自动完成(ctrl+space),查看可用的建议。

您使用的是Cucumbers内部API中的位和位。然而,黄瓜lambda DSL的全部包含在
En
接口中(及其父接口
LambdaGlue
)。因此,要定义单个数据表条目转换器,您需要执行以下操作:

公共类BurpStepDefs实现{
私有静态ObjectMapper ObjectMapper=新ObjectMapper();
公共负荷调节器()
数据表类型(
(映射条目)->objectMapper.convertValue(条目,CartInput.Article.class));
}
}
如果您使用的是现代IDE,还可以在构造函数中键入
this.
并触发自动完成(ctrl+space),查看可用的建议