Spring Boot MVC中如何通过对象校验POST请求响应是否相等
用对象对比校验Spring MVC响应结果
步骤1:修正ResponseResult字段与JSON的映射匹配
你的ResponseResult类里的isSuccess字段和JSON响应里的success键名不对应,直接反序列化会失败,需要调整:
- 方案一:修改字段名匹配JSON键
public class ResponseResult { private boolean success; // 替换原isSuccess,匹配JSON中的"success" private int statusCode; private String message; private Object data; // 务必添加Getter/Setter方法,或用Lombok的@Data注解自动生成 }
- 方案二:保留原字段名,添加Jackson注解指定映射
import com.fasterxml.jackson.annotation.JsonProperty; public class ResponseResult { @JsonProperty("success") // 指定对应JSON中的"success"键 private boolean isSuccess; private int statusCode; private String message; private Object data; // Getter/Setter方法 }
步骤2:通过对象反序列化+断言实现批量校验
替换原来逐个jsonPath校验的逻辑,改为获取响应后反序列化为ResponseResult,再和预期实例对比:
// 1. 构建预期的响应结果实例 ResponseResult expectedResult = new ResponseResult(); expectedResult.setSuccess(true); // 对应修正后的字段名 expectedResult.setStatusCode(200); expectedResult.setMessage("success"); expectedResult.setData(null); // 2. 执行请求并获取完整响应结果 MvcResult mvcResult = mockMvc.perform( post("/api/v1/clients/test") .contentType(MediaType.APPLICATION_JSON) .content(mapper.writeValueAsString(client)) ) .andExpect(status().isOk()) .andExpect(content().contentType("application/json")) .andReturn(); // 3. 将响应体反序列化为ResponseResult对象 String responseBody = mvcResult.getResponse().getContentAsString(); ResponseResult actualResult = mapper.readValue(responseBody, ResponseResult.class); // 4. 对比预期与实际对象 // 方式一:JUnit原生断言逐个校验 assertEquals(expectedResult.getSuccess(), actualResult.getSuccess()); assertEquals(expectedResult.getStatusCode(), actualResult.getStatusCode()); assertEquals(expectedResult.getMessage(), actualResult.getMessage()); assertEquals(expectedResult.getData(), actualResult.getData()); // 方式二:用AssertJ递归对比(更简洁,无需逐个写断言) // assertThat(actualResult).usingRecursiveComparison().isEqualTo(expectedResult);
补充说明
- 确保你使用的
ObjectMapper实例(代码中的mapper)已正确配置,能处理null值和字段映射逻辑。 - 若使用AssertJ的递归对比,需要引入AssertJ依赖,它会自动对比对象的所有嵌套属性,大幅简化校验代码。
- 必须保证
ResponseResult类有完整的Getter/Setter方法,否则反序列化或属性访问会抛出异常。
内容的提问来源于stack exchange,提问作者Smile
相关产品推荐
相关产品推荐

