RestAssured反序列化时如何避免键名中点号被识别为JSONPath分隔符
RestAssured解析含点号键名JSON的解决方案
问题原因
该配置确实存在于JsonPathConfig中,你之前没有找到对应参数。RestAssured JsonPath默认使用.作为路径分隔符,会自动将键名中的点识别为嵌套层级拆分标识,才会出现你遇到的嵌套Map结构。
解决方案
有两种常用实现方式可以保留原始带点号的键名:
方案1:直接使用独立JSON序列化工具(更稳定)
不使用RestAssured自带的JsonPath解析,直接提取原始响应字符串后用Jackson/Gson反序列化为Map,完全规避RestAssured的路径解析规则:
// 提取原始响应字符串 String responseBody = then().extract().body().asString(); // Jackson反序列化示例 ObjectMapper objectMapper = new ObjectMapper(); Map<String, Object> result = objectMapper.readValue(responseBody, new TypeReference<Map<String, Object>>() {});
方案2:修改JsonPath的路径分隔符配置
调用JsonPathConfig的withPathDelimiter方法,将默认的.分隔符替换为不会出现在你的键名中的其他字符,即可保留原始键名:
// 自定义JsonPath配置,替换路径分隔符为下划线 JsonPathConfig customConfig = JsonPathConfig.jsonPathConfig() .withPathDelimiter('_'); // 使用自定义配置解析响应 Map<String, Object> result = JsonPath.using(customConfig) .parse(then().extract().body().asString()) .getMap("");
内容的提问来源于stack exchange,提问作者royalhero
相关产品推荐
相关产品推荐

