使用MockMvc测试controller接口
@Test
void login() throws Exception {
String contentAsString = mockMvc.perform(MockMvcRequestBuilders
.post(new URI("/sys/login"))
.contentType(MediaType.APPLICATION_JSON_VALUE)
.param("account",loginParam.getAccount())
.param("password",loginParam.getPassword())
.accept(MediaType.APPLICATION_JSON_VALUE))
.andExpect(status().isOk())
.andDo(print())
.andReturn()
.getResponse()
.getContentAsString();
log.info(">>> " + contentAsString);
}
MockHttpServletRequest:
HTTP Method = POST
Request URI = /sys/login
Parameters = {}
Headers = [Content-Type:"application/json", Accept:"application/json", Content-Length:"39"]
Body = <no character encoding set>
Session Attrs = {}
Handler:
Type = com.bbzd.pca.sys.modular.auth.controller.SysLoginController
Method = com.bbzd.pca.sys.modular.auth.controller.SysLoginController
Async:
Async started = false
Async result = null
Resolved Exception:
Type = org.springframework.http.converter.HttpMessageNotReadableException
ModelAndView:
View name = null
View = null
Model = null
FlashMap:
Attributes = null
MockHttpServletResponse:
Status = 200
Error message = null
Headers = [Content-Type:"application/json"]
Content type = application/json
Body = {"success":false,"code":1015002,"message":"请求JSONå‚æ•°æ ¼å¼ä¸æ£ç¡®ï¼Œè¯·æ£€æŸ¥å‚æ•°æ ¼å¼"}
Forwarded URL = null
Redirected URL = null
Cookies = []
解决办法
- ResultActions拿到response再进行编码设置,
getContentAsString(Charset.defaultCharset())
@Test
void login() throws Exception {
String contentAsString = mockMvc.perform(MockMvcRequestBuilders
.post(new URI("/sys/login"))
.contentType(MediaType.APPLICATION_JSON_VALUE)
.param("account",loginParam.getAccount())
.param("password",loginParam.getPassword())
.accept(MediaType.APPLICATION_JSON_VALUE))
.andExpect(status().isOk())
.andDo(print())
.andReturn()
.getResponse()
.getContentAsString(Charset.defaultCharset());
log.info(">>> " + contentAsString);
}