首页 新闻 会员 周边

MockMvcResultHandlers.print()打印结果中body中文乱码

1
[待解决问题]

使用MockMvc做controller接口测试

测试主体部分如下:

    @Test
    public void test() throws Exception {
        //请求参数
        String requestInfo = "{ \"app_key\": \"*********\", \"cust_account\": \"********\",\"product_key\": \"*****\"}";
        this.mockMvc
                .perform(post("/queryPhoneResource").accept(MediaType.APPLICATION_JSON)
                        .content(requestInfo))
                .andDo(print())
                //添加断言
                .andExpect(status().isOk());
    }

打印结果:

MockHttpServletRequest:
         HTTP Method = POST
         Request URI = /queryPhoneResource
          Parameters = {}
             Headers = {Accept=[application/json]}

             Handler:
                Type = com.***.controller.***

               Async:
   Was async started = false
        Async result = null

  Resolved Exception:
                Type = null

        ModelAndView:
           View name = null
                View = null
               Model = null

            FlashMap:

MockHttpServletResponse:
              Status = 200
       Error message = null
             Headers = {flag=[0000], desc=[成功]}
        Content type = null
                Body = {"flag":"0000","desc":"成功","data":{"surplusResources":"24000","afterChargingResources":"500"}}
       Forwarded URL = null
      Redirected URL = null
             Cookies = []

可以看到标黄的地方乱码,这是为什么呢?

Achong的主页 Achong | 菜鸟二级 | 园豆:204
提问于:2017-08-24 18:43
< >
分享
所有回答(3)
1

通过ResultActions拿到response再进行编码设置

ResultActions resultActions = this.mockMvc.perform(post(requestUrl)
                                            .accept(MediaType.APPLICATION_JSON)
                                            .content(requestParam));
        resultActions.andReturn().getResponse().setCharacterEncoding("UTF-8");
        //添加断言
        resultActions.andDo(print()).andExpect(status().isOk());

输出结果:


MockHttpServletRequest:
         HTTP Method = POST
         Request URI = /queryPhoneResource
          Parameters = {}
             Headers = {Accept=[application/json]}

             Handler:
                Type = com.***.controller.***

               Async:
   Was async started = false
        Async result = null

  Resolved Exception:
                Type = null

        ModelAndView:
           View name = null
                View = null
               Model = null

            FlashMap:

MockHttpServletResponse:
              Status = 200
       Error message = null
             Headers = {flag=[0000], desc=[成功]}
        Content type = null
                Body = {"flag":"0000","desc":"成功","data":{"surplusResources":"24000","afterChargingResources":"500"}}
       Forwarded URL = null
      Redirected URL = null
             Cookies = []
Achong | 园豆:204 (菜鸟二级) | 2017-08-29 14:39

谢谢,可以解决乱码问题

支持(1) 反对(0) 裹成熊猫的蚊子 | 园豆:200 (初学一级) | 2020-07-15 14:43
0

很棒,解决了问题,谢谢

helingzhi | 园豆:202 (菜鸟二级) | 2021-02-01 14:58
0

终于找到想要的答案了

捉水母的派大星 | 园豆:202 (菜鸟二级) | 2021-12-12 21:28
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册