mockMvc调用.contentType(MediaType.APPLICATION_JSON)的作用是什么?
问题对应解答
你删除的配置是contentType(MediaType.APPLICATION_JSON),相关说明如下:
该配置的作用
这行代码的作用是为测试请求设置Content-Type请求头,明确告知服务端本次请求携带的请求体是JSON格式,方便服务端选择对应的解析器处理请求参数。
删除后测试无差异的原因
你当前测试的删除接口仅通过路径参数传递用户ID,没有携带任何请求体内容,服务端不需要解析请求体,所以不管有没有设置这个请求头,都不会影响接口的正常执行逻辑,自然测试结果不会有区别。
必须使用该配置的场景
只有当存在以下情况时,才需要主动添加该配置:
- 请求需要提交JSON格式的请求体:比如POST新增、PUT修改类接口,需要通过
content方法传递JSON字符串参数时,必须声明Content-Type为JSON,否则服务端会无法识别参数格式,返回415 Unsupported Media Type错误。
示例代码:@Test public void addPatient_success() throws Exception { String patientJson = "{\"name\":\"张三\",\"age\":30,\"contact\":\"13000000000\"}"; mockMvc.perform(MockMvcRequestBuilders .post("/patient") // 必须加这行才能让服务端正确解析上面的JSON参数 .contentType(MediaType.APPLICATION_JSON) .content(patientJson)) .andExpect(status().isOk()); } - 服务端有强制校验规则:部分项目会统一拦截所有请求,要求必须携带符合约定的
Content-Type头,就算是没有请求体的请求也需要校验,这种场景下也必须添加该配置,否则请求会被拦截直接返回错误。
针对void返回值接口的说明
返回值为void的Controller接口,Spring MVC默认会在接口无异常抛出时返回200 OK状态码,这个响应逻辑和你是否配置Content-Type请求头完全无关,所以你在这个场景下看不到配置的作用。
内容的提问来源于stack exchange,提问作者user16613329
相关产品推荐
相关产品推荐

