在 Postman 中使用 GET 方式请求 'http://localhost:8091/backstage/admin/session' 接口时,返回的 'data' 为空的原因可能是因为在测试时没有设置正确的 session,导致在 Controller 中获取 session 时返回 null。

在测试方法中,通过调用 'adminService' 的 'getAdmin' 方法获取到的 'admin' 对象是直接从数据库中查询得到的,而不是通过登录获取到的 session 中的 'admin' 对象。因此,测试方法中的 'admin' 对象和 Controller 中获取 session 中的 'admin' 对象是不同的,导致在 Postman 中请求接口时返回的 'data' 为 null。

为了解决这个问题,可以在测试方法中模拟登录,将 'admin' 对象保存到 session 中,然后再调用接口时使用正确的 session。

可以参考以下示例代码:

@Test
public void testGetAdmin() {
    // 模拟登录,将 'admin' 对象保存到 session 中
    HttpSession session = new MockHttpSession();
    Admin admin = new Admin();
    admin.setUsername('test1');
    session.setAttribute('admin', admin);

    // 设置请求的 session
    RequestBuilder requestBuilder = MockMvcRequestBuilders.get('/backstage/admin/session')
            .session(session);

    // 发起请求并获取响应结果
    MvcResult result = mockMvc.perform(requestBuilder)
            .andExpect(MockMvcResultMatchers.status().isOk())
            .andReturn();

    // 解析响应结果
    String jsonResult = result.getResponse().getContentAsString();
    JSONObject jsonObject = JSONObject.fromObject(jsonResult);
    boolean success = jsonObject.getBoolean('success');
    JSONObject data = jsonObject.getJSONObject('data');
    if (success) {
        System.out.println(data.getString('username'));
        System.out.println(data.getString('name'));
    }
}

使用 MockMvc 进行测试时,可以通过 MockHttpSession 模拟 session,并将其设置到请求中。然后通过调用 'andExpect' 和 'andReturn' 方法来获取响应结果,并解析出 'data' 对象。

这样,在测试方法中就可以正确地获取到接口返回的 'data' 对象,而不是返回 null。

SpringBoot 后台管理系统:Postman 请求 Session 失败问题排查与解决

原文地址: https://www.cveoy.top/t/topic/o8YE 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录