首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >黄瓜V5-V6 -在特征文件步骤中传递复杂对象

黄瓜V5-V6 -在特征文件步骤中传递复杂对象
EN

Stack Overflow用户
提问于 2021-06-29 16:42:30
回答 1查看 273关注 0票数 1

因此,我最近迁移到v6,我将尝试简化我的问题。

我有以下课程

代码语言:javascript
复制
@AllArgsConstructor
public class Songs {
    String title;
    List<String> genres;
}

在我的场景中,我希望有这样的东西:

代码语言:javascript
复制
Then The results are as follows:
|title      |genre         |
|happy song |romance, happy|

而实现应该是这样的:

代码语言:javascript
复制
@Then("Then The results are as follows:")
public void theResultsAreAsFollows(Songs song) { 
//Some code here
}

我有默认的变压器

代码语言:javascript
复制
@DefaultParameterTransformer
    @DefaultDataTableEntryTransformer(replaceWithEmptyString = "[blank]")
    @DefaultDataTableCellTransformer
    public Object transformer(Object fromValue, Type toValueType) {
        ObjectMapper objectMapper = new ObjectMapper();
        return objectMapper.convertValue(fromValue, objectMapper.constructType(toValueType));
}

我当前的问题是,我得到了以下错误:无法构造java.util.ArrayList的实例(尽管至少存在一个Creator )

我如何告诉黄瓜将特定的细胞解释为列表?但要把一切都保持在同一步而不分裂?或者更好的方法是如何在包含不同变量类型(如List、HashSet等)的步骤中发送对象。

如果我做了更改,并将列表替换为字符串,那么一切都按预期的方式工作。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-07-02 09:43:23

@M.P.Korstanje谢谢你的主意。如果有人试图找到解决这一问题的办法,这就是我按照收到的建议所做的事情。检查以查看类型fromValue并将转换方法更新为如下所示:

代码语言:javascript
复制
if (fromValue instanceof LinkedHashMap) {
        Map<String, Object> map =  (LinkedHashMap<String, Object>) fromValue;
        Set<String> keys = map.keySet();

        for (String key : keys) {
          if (key.equals("genres")) {
              List<String> genres = Arrays.asList(map.get(key).toString().split(",", -1));
              map.put("genres", genres);
          }
            return objectMapper.convertValue(map, objectMapper.constructType(toValueType));
        }
    }

它是相当具体的,但找不到更好的解决方案:)

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/68182672

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档