SpringBoot 后台管理系统:Postman 请求 Session 失败问题排查与解决
在 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。
原文地址: https://www.cveoy.top/t/topic/o8YE 著作权归作者所有。请勿转载和采集!