我有一个带有2个路径变量和2个请求标头(一个是必需的,一个是可选的)的rest控制器。我可以使用postman测试其余api,以获取数据,而无需提供可选的req标头。 但是当使用可选的req标头进行测试时,mockMvc失败。
我发现带有可选路径变量的嘲笑mvcvc问题,但找不到有关如何测试可选请求标头的任何信息。
我的控制器:
@GetMapping(value = "/{teacherId}/school/{schoolId}/test", produces = MediaType.APPLICATION_JSON_VALUE)
public ResponseEntity<? extends Object> getSupportDetails(@RequestHeader(userId) String userId,
@RequestHeader(value=classId, required=false) String classId,
@PathVariable String teacherId, @PathVariable String schoolId) {
//some code
}
我的考试班:
@Autowired
private WebApplicationContext context;
private MockMvc mockMvc;
@Before public void setUp() { this.mockMvc =
MockMvcBuilders.webAppContextSetup(this.context).build(); }
@Test
public void getSupportWithoutClassId() throws Exception { this.mockMvc.perform(get("/{teacherId}/school/{schoolId}/test", "113", "105")
.header("userId", "*"))
.andDo(MockMvcResultHandlers.print())
.andExpect(status().is(200));
}
预期结果应为状态200。 但是,如果我没有在header()中提供可选的标题,则会出现错误:
org.springframework.web.util.NestedServletException: Request processing failed; nested exception is java.lang.IllegalArgumentException: Header value must not be null
但是,如果我同时设置了可选标头和必需标头,我将得到正确的响应。
我该如何使用模拟Mvc测试这种情况?