繁体   English   中英

将Java POJO转换为PactDslJsonBody

[英]Convert Java POJO into PactDslJsonBody

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

HELPER CLASS CODE-用于将输入的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,我真的建议您使用DSLLambda版本,因为它更容易理解。

请尝试保持该论坛开放,以解决Pact特定问题,而不是有关您自己的代码为何不起作用的问题。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM