You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.23 22:45:18