java - 将 Java POJO 转换为 PactDslJsonBody

标签 java pact pact-jvm

我正在尝试编写一个帮助程序类来直接从 Java Pojo 获取 PactDslJsonBody。但是,它无法创建嵌套 Json 对象。有人可以解释一下为什么吗?下面是我的代码:

HELPER 类代码 - 用于将输入 java pojo 转换为 PactDslJsonBody

public class PactDslHelper {

    private static PactDslJsonBody responseBody;

    public PactDslJsonBody getResponseBody() {
        return responseBody;
    }


    private PactDslJsonBody updateResponseBody(Class<?> clazz) {
        responseBody.object("yooyoo");
        Field[] fields = clazz.getDeclaredFields();
        for (Field field : fields) {
            String fieldName = field.getName();
            System.out.println("fieldName is : = " + fieldName);
            System.out.println("fieldType Simple Name is : = " + field.getType().getSimpleName());
            switch (field.getType().getSimpleName()) {
            case "Integer":
                responseBody.integerType(fieldName);
                break;
            case "String":
                responseBody.stringType(fieldName);
                break;
            case "UUID":
                responseBody.uuid(fieldName);
                break;
            case "Boolean":
                responseBody.booleanType(fieldName);
                break;

            }
        }
        responseBody.closeObject();
        return responseBody;
    }

    public PactDslHelper(Class<?> clazz) {

        Field[] fields = clazz.getDeclaredFields();
        responseBody = new PactDslJsonBody();

        for (Field field : fields) {
            Class<?> fieldType = field.getType();
            String fieldName = field.getName();
            System.out.println("fieldName is : = " + fieldName);
            System.out.println("fieldType Simple Name is : = " + field.getType().getSimpleName());
            switch (field.getType().getSimpleName()) {
            case "Integer":
                responseBody.integerType(fieldName);
                break;
            case "String":
                responseBody.stringMatcher(fieldName,ApplicationConstants.REGEX_UUID);
                break;
            case "UUID":
                responseBody.uuid(fieldName);
                break;
            case "Boolean":
                responseBody.booleanType(fieldName);
                break;
            default:
                if (!fieldType.isPrimitive()) {
                    responseBody = updateResponseBody(fieldType);
                }
            }
        }

    }
<小时/>

如何使用该类的片段:

responseBody_dto = new PactDslHelper(ProductFrontEntity.class);
<小时/>

失败的测试: 输入类别:

public class ProductFrontEntity {
        private String storeId;
        private String productId;
        private String code;
        private ProductIdentificationMap productIdentificationMap;
        }

public class ProductIdentificationMap {
    private String jAN;
    }

预期结果:

{
 productId:***,
 code:***,
 productIdentificationMap{
                          jan:***
                }
}

实际结果:

{
 productId:***,
 code:***,
 jan:***
}

最佳答案

难道是你自己的代码有问题?您似乎没有在对象容器对象内部打开一个新对象,而该对象最后没有正确关闭,因此一切都是平坦的。

如果您使用的是 java 8,我真的建议您使用 Lambda version of the DSL因为它更容易理解。

请尝试让此论坛保持开放状态,以解决 Pact 特定问题,而不是有关您自己的代码为何无法运行的问题。

关于java - 将 Java POJO 转换为 PactDslJsonBody,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48637771/

相关文章:

java - 添加 FXML 中定义的元素以循环列出

c# - 使用字符串中存在的分隔符拆分字符串

java - 如果所有消费者都以相同的方式使用相同的 API,为什么我们应该为每个消费者准备 1 个 Pact 文件?

pact - Pact 中的 Spring 模拟测试

PactDslJsonArray 匹配所有项目的根级数组

java - Apache POI setPrintArea 为 A4 页面大小

java - 在 Unix 机器上运行时日语字体无法正确显示

javascript - Pact 模拟服务器未返回正确的 CORS header

testing - PactDslJsonBody 无法创建 JSON 对象

spring-boot - @SpyBean 不适用于 Pact 和 JUnit 5