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

MockMvc发起Get请求无法访问Controller返回404问题排查求助

问题根因

404的核心原因是测试类的配置错误,导致Spring测试上下文没有注册DepartmentController的接口映射:

  1. 你加了@ContextConfiguration(classes = com.bnpp.leavemanagementsystem.LeaveManagementSystemApplicationTests.class),指定的配置类是测试类本身,既不是标准Spring配置类,也不会扫描你业务代码所在的com.bnpp.leavemanagement包,导致Controller根本没有被加载到测试上下文中。
  2. 测试类里的大量冗余注解干扰了@WebMvcTest的自动配置逻辑:@ExtendWith(MockitoExtension.class)、@WebAppConfiguration在使用@WebMvcTest时都不需要重复添加,手动@InjectMocks注入Controller、注入WebApplicationContext也是多余操作。

解决方案

直接删除测试类里的冗余注解和没用的注入字段即可,修正后的测试类代码如下:

import static org.springframework.test.web.servlet.result.MockMvcResultHandlers.print;
import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.status;

import java.util.ArrayList;
import java.util.List;

import org.hamcrest.Matchers;
import org.junit.jupiter.api.Test;
import org.mockito.Mockito;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.autoconfigure.web.servlet.WebMvcTest;
import org.springframework.boot.test.mock.mockito.MockBean;
import org.springframework.context.annotation.Description;
import org.springframework.test.web.servlet.MockMvc;
import org.springframework.test.web.servlet.request.MockMvcRequestBuilders;
import org.springframework.test.web.servlet.result.MockMvcResultMatchers;

import com.bnpp.leavemanagement.controller.DepartmentController;
import com.bnpp.leavemanagement.model.DepartmentModel;
import com.bnpp.leavemanagement.service.DepartmentService;

@WebMvcTest(DepartmentController.class)
public class DepartmentControllerTest {

    @MockBean
    DepartmentService depService;
    
    @Autowired
    private MockMvc mockMvc;
    
    @Test
    @Description("Should return a list of DepartmentModel objects when called")
    void shouldReturnListOfDepartmentModel() throws Exception
    {
        DepartmentModel depModel = new DepartmentModel();
        depModel.setId(1L);
        depModel.setName("Mock");
        
        List<DepartmentModel> listDepmodel = new ArrayList<>();
        listDepmodel.add(depModel);
        
        Mockito.when(depService.getAllDepartments()).thenReturn(listDepmodel);
        
        mockMvc.perform(MockMvcRequestBuilders.get("/department"))
        .andDo(print())
        .andExpect(status().isOk())
                .andExpect(MockMvcResultMatchers.jsonPath("$.size()", Matchers.is(1)))
                .andExpect(MockMvcResultMatchers.jsonPath("$[0].id").value(1))
                .andExpect(MockMvcResultMatchers.jsonPath("$[0].name").value("Mock"));
    }

}

额外注意

如果修改后依然有问题,检查你的Spring Boot启动类是否放在com.bnpp.leavemanagement根包下,保证@WebMvcTest可以正常扫描到Controller类。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.12 23:57:00