如何使用RestAssured断言响应字符串体为JSON格式?
使用RestAssured断言响应体为有效JSON格式
要验证响应体的字符串是合法JSON,你可以通过以下几种方式替换代码中的XXX:
方法1:自定义Hamcrest Matcher(推荐)
创建一个可复用的自定义Matcher,让断言逻辑更清晰:
首先定义Matcher类:
import com.fasterxml.jackson.databind.ObjectMapper; import org.hamcrest.BaseMatcher; import org.hamcrest.Description; public class ValidJsonMatcher extends BaseMatcher<String> { private static final ObjectMapper objectMapper = new ObjectMapper(); @Override public boolean matches(Object item) { if (!(item instanceof String)) { return false; } try { objectMapper.readTree((String) item); return true; } catch (Exception e) { return false; } } @Override public void describeTo(Description description) { description.appendText("a valid JSON string"); } public static ValidJsonMatcher validJson() { return new ValidJsonMatcher(); } }
然后在断言中直接使用:
response.then().assertThat().body(validJson());
方法2:内联解析验证(快速实现)
如果不想额外定义类,可以在断言中直接嵌入解析逻辑:
import com.fasterxml.jackson.databind.ObjectMapper; // 建议全局复用ObjectMapper实例 ObjectMapper objectMapper = new ObjectMapper(); response.then().assertThat().body( jsonStr -> { try { objectMapper.readTree((String) jsonStr); return true; } catch (Exception e) { return false; } }, org.hamcrest.Matchers.is(true) );
方法3:利用RestAssured自动解析特性
如果响应的Content-Type是application/json,RestAssured会自动尝试解析JSON内容,若格式不合法会直接抛出JsonParseException,此时无需额外断言——请求执行无异常即说明是有效JSON。但该方法仅适用于响应头标记为JSON类型的场景,不适用于纯文本格式返回的JSON字符串。
依赖补充
上述示例使用Jackson库做JSON解析,确保项目已引入对应依赖:
<!-- Maven依赖示例 --> <dependency> <groupId>com.fasterxml.jackson.core</groupId> <artifactId>jackson-databind</artifactId> <version>2.15.2</version> <!-- 使用最新稳定版本 --> </dependency>
若偏好Gson库,可替换为Gson的JsonParser实现验证逻辑。
内容的提问来源于stack exchange,提问作者Martin Ma
相关产品推荐
相关产品推荐

