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

Spring Boot 3.2 MockMvc测试出现Failed to write request错误

解决Spring Boot 3.2 MockMvc测试500错误(Failed to write request)

可能的原因及修复方案

1. 检查BillRecord类的序列化兼容性

Spring Boot默认使用Jackson序列化JSON,若BillRecord不满足Jackson序列化要求,会导致响应写入失败:

  • 确保类存在无参构造函数(Jackson序列化的默认要求)
  • 确保所有需要序列化的字段配有对应的getter方法
  • 若使用LocalDate,确认Spring Boot的Jackson自动配置生效(Spring Boot 3.x默认集成jackson-datatype-jsr310模块,若手动排除需重新添加依赖)

示例修正后的BillRecord:

public class BillRecord {
    private Long id;
    private String code;
    private LocalDate billDate;

    // 无参构造函数
    public BillRecord() {}

    // 带参构造函数
    public BillRecord(Long id, String code, LocalDate billDate) {
        this.id = id;
        this.code = code;
        this.billDate = billDate;
    }

    // Getter方法
    public Long getId() { return id; }
    public String getCode() { return code; }
    public LocalDate getBillDate() { return billDate; }
}

2. 修正Mock匹配的参数类型

测试中Mock的是PageRequest.class,但Controller通过BindingPageRequestHelper.binding返回的可能是其他Pageable实现类(如自定义分页实现),导致Mock不匹配,实际调用了未Mock的真实方法引发异常。将Mock参数改为通用的Pageable.class:

Mockito.when(bill.getBill(Mockito.anyLong(), Mockito.any(Pageable.class)))
       .thenReturn(new PageImpl<>(Arrays.asList(alr)));

3. 排查BindingPageRequestHelper逻辑

确认BindingPageRequestHelper.binding方法未抛出异常,比如排序字段不存在、分页参数非法等。可在测试中打印newPageRequest内容,验证是否生成了有效的Pageable对象。

4. 启用详细日志定位具体异常

在测试环境配置中开启DEBUG日志,查看完整异常栈,明确"Failed to write request"(实际应为响应写入失败)的根本原因:

# application-test.properties
logging.level.org.springframework.web=DEBUG
logging.level.com.fasterxml.jackson=DEBUG

日志会暴露Jackson序列化时的字段访问异常、类型转换错误等细节。

5. 验证MockMvc配置正确性

确保测试类正确配置MockMvc,使用@WebMvcTest注解并正确MockBillService:

@WebMvcTest(BillController.class)
class BillControllerTest {
    @Autowired
    private MockMvc mockMvc;

    @MockBean
    private BillService billService;

    // 测试方法...
}

内容的提问来源于stack exchange,提问作者robert trudel

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.03 01:10:00