如何将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
相关产品推荐
相关产品推荐

