You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何将POJO构造的JSON中BodyPatterns部分转义适配Mock接口POST要求

问题根因

你当前生成的结构不符合Mock服务要求,是因为equalToJson和response.body字段你直接赋值了POJO对象,序列化后是嵌套JSON结构,而Mock服务要求这两个字段是JSON字符串形式的转义文本,你只需要调整POJO字段类型+加一步JSON序列化即可实现灵活传参,完全不需要硬编码载荷。


解决步骤

1. 调整POJO字段类型

把BodyPattern类中的equalToJson字段类型从你之前的List<EqualToJson>修改为String;同理Response类中的body字段也修改为String类型。

public class BodyPattern {
    // 修改字段类型为String
    private String equalToJson;
    private String jsonCompareMode;
    // 原有getter/setter保持不变
}

2. 新增JSON序列化逻辑

使用Jackson/Gson等JSON序列化工具,将你构造好的内部载荷POJO(EqualToJson、ResponsePayload)序列化为JSON字符串,序列化工具会自动处理引号转义、格式处理,不需要手动写转义符。

完整修改后的代码示例

// 引入Jackson序列化工具,用Gson实现逻辑同理
import com.fasterxml.jackson.databind.ObjectMapper;
import com.fasterxml.jackson.core.JsonProcessingException;

public class MockBuilder {
    private static final ObjectMapper objectMapper = new ObjectMapper();
    private static final String URL = "你的基础路径";

    public Request initRequest() throws JsonProcessingException {
        Request req = new Request();
        BodyPattern bodyPat = new BodyPattern();
        EqualToJson equalToJ = new EqualToJson();

        // 构造查询参数,这部分逻辑和你原有逻辑一致,可灵活把参数作为方法入参传入
        List<Query> queryList = new ArrayList<>();
        Query query1 = new Query();
        query1.setName("name1");
        query1.setValue("123");
        queryList.add(query1);

        Query query2 = new Query();
        query2.setName("name2");
        query2.setValue("345");
        queryList.add(query2);

        Query query3 = new Query();
        // 注意你原有代码这里写错了,name3误写为name2,已修正
        query3.setName("name3");
        query3.setValue("someName");
        queryList.add(query3);

        equalToJ.setQuery(queryList);
        equalToJ.setAnotherItem(new ArrayList<>());
        equalToJ.setSide(77);
        equalToJ.setPageSize(44);

        // 核心步骤:把内部载荷POJO序列化为带转义的JSON字符串
        String equalToJsonStr = objectMapper.writeValueAsString(equalToJ);
        bodyPat.setEqualToJson(equalToJsonStr);
        bodyPat.setJsonCompareMode("LENIENT");

        List<BodyPattern> bodyPatList = new ArrayList<>();
        bodyPatList.add(bodyPat);
        req.setUrlPath(URL + "/Test001");
        req.setMethod("POST");
        req.setBodyPatterns(bodyPatList);
        return req;
    }
}

Response构造逻辑同理

你只需要先构造Response对应的返回内容POJO,填好所有字段后,用同样的序列化方式转成字符串,赋值给Response类的body字段即可。

内容的提问来源于stack exchange,提问作者jacob1989

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.06 08:00:00