Geo*_*ler 3 java spring contextpath spring-restdocs
我尝试使用以下代码片段为spring rest mocks设置上下文路径:
private MockMvc mockMvc;
@Before
public void setUp() {
this.mockMvc = MockMvcBuilders.webAppContextSetup(this.context)
.apply(documentationConfiguration(this.restDocumentation))
.alwaysDo(document("{method-name}/{step}/",
preprocessRequest(prettyPrint()),
preprocessResponse(prettyPrint())))
.build();
}
@Test
public void index() throws Exception {
this.mockMvc.perform(get("/").contextPath("/api").accept(MediaTypes.HAL_JSON))
.andExpect(status().isOk())
.andExpect(jsonPath("_links.business-cases", is(notNullValue())));
}
Run Code Online (Sandbox Code Playgroud)
但是我收到以下错误:
java.lang.IllegalArgumentException: requestURI [/] does not start with contextPath [/api]
Run Code Online (Sandbox Code Playgroud)
怎么了? 是否可以在代码中的单个位置指定contextPath,例如直接在构建器中?
在这里控制器
@RestController
@RequestMapping(value = "/business-case", produces = MediaType.APPLICATION_JSON_VALUE)
public class BusinessCaseController {
private static final Logger LOG = LoggerFactory.getLogger(BusinessCaseController.class);
private final BusinessCaseService businessCaseService;
@Autowired
public BusinessCaseController(BusinessCaseService businessCaseService) {
this.businessCaseService = businessCaseService;
}
@Transactional(rollbackFor = Throwable.class, readOnly = true)
@RequestMapping(value = "/{businessCaseId}", method = RequestMethod.GET)
public BusinessCaseDTO getBusinessCase(@PathVariable("businessCaseId") Integer businessCaseId) {
LOG.info("GET business-case for " + businessCaseId);
return businessCaseService.findOne(businessCaseId);
}
}
Run Code Online (Sandbox Code Playgroud)
您需要在传递给的路径中包含上下文路径get.
如果您已在问题中显示,则上下文路径是/api并且您想要发出请求,/因此您需要传递/api/给get:
@Test
public void index() throws Exception {
this.mockMvc.perform(get("/api/").contextPath("/api").accept(MediaTypes.HAL_JSON))
.andExpect(status().isOk())
.andExpect(jsonPath("_links.business-cases", is(notNullValue())));
}
Run Code Online (Sandbox Code Playgroud)
许多人所做的就是在mockMvc 测试中不使用上下文路径。您只需指定@RequestMappingURI:
@Test
public void index() throws Exception {
this.mockMvc.perform(get("/business-case/1234").accept(MediaTypes.HAL_JSON))
.andExpect(status().isOk())
.andExpect(jsonPath("_links.business-cases", is(notNullValue())));
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
3289 次 |
| 最近记录: |