RestAssured POST请求后无法获取提交的完整JSON响应如何解决?
问题原因及解决方案
你的问题出在请求体的JSON格式错误:你把两个独立的JSON对象字符串直接拼接,生成的是{"name": "morpheus"}{"job": "leader"},这是不符合JSON规范的无效格式,服务器无法正确解析出name和job参数,因此响应里不会返回这些提交的字段。
修正方式有以下几种:
1. 构造正确的单个JSON字符串
直接将所有键值对放在同一个JSON对象中:
@Test public void postTest() { Response response = RestAssured.given() .body("{\"name\": \"morpheus\", \"job\": \"leader\"}") .when() .post(base_URI); assertEquals(response.statusCode(), 201); System.out.println(response.asPrettyString()); }
2. 使用Map自动序列化(更简洁)
用Map存储请求参数,RestAssured会自动将其序列化为合法的JSON:
@Test public void postTest() { Map<String, String> requestBody = new HashMap<>(); requestBody.put("name", "morpheus"); requestBody.put("job", "leader"); Response response = RestAssured.given() .body(requestBody) .when() .post(base_URI); assertEquals(response.statusCode(), 201); System.out.println(response.asPrettyString()); }
3. 使用POJO类(规范的企业级写法)
定义一个对应请求体的实体类,通过对象传递参数,避免手动拼接JSON的错误:
// 定义实体类 class UserRequest { private String name; private String job; // 构造方法 public UserRequest(String name, String job) { this.name = name; this.job = job; } // 必须提供getter方法,否则序列化会失败 public String getName() { return name; } public String getJob() { return job; } } // 测试方法 @Test public void postTest() { UserRequest requestBody = new UserRequest("morpheus", "leader"); Response response = RestAssured.given() .body(requestBody) .when() .post(base_URI); assertEquals(response.statusCode(), 201); System.out.println(response.asPrettyString()); }
修正后,服务器能正确解析请求体,响应就会返回包含name、job、id和createdAt的完整JSON。
内容的提问来源于stack exchange,提问作者Kim Gordon
相关产品推荐
相关产品推荐

