Java springrest模拟上下文路径
我尝试使用以下代码段为spring rest模拟设置上下文路径:Java springrest模拟上下文路径,java,spring,contextpath,spring-restdocs,Java,Spring,Contextpath,Spring Restdocs,我尝试使用以下代码段为spring rest模拟设置上下文路径: private MockMvc mockMvc; @Before public void setUp() { this.mockMvc = MockMvcBuilders.webAppContextSetup(this.context) .apply(documentationConfiguration(this.restDocumentation)) .alwaysDo(
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())));
}
但我收到以下错误:
java.lang.IllegalArgumentException: requestURI [/] does not start with contextPath [/api]
怎么了?
是否可以在代码中的单个位置指定上下文路径,例如直接在生成器中指定?
编辑
这里是控制器
@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);
}
}
您需要在传递给
get
的路径中包含上下文路径
在问题中显示的情况下,上下文路径是/api
,您希望向/
发出请求,因此需要将/api/
传递到获取:
@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())));
}
许多人所做的只是在mockMvc测试中不使用上下文路径。您只能指定@RequestMapping
URI:
@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())));
}
试着发布你的控制者-查看编辑。为什么要投否决票?请记住,server.context路径=/api
已设置。据我所知,这不会对控制器产生任何影响。您的(src/main)代码可以使用属性server.servlet.context path
设置上下文路径。令人失望的是,(src/test)代码需要在每个mockMvc.perform()
调用中指定上下文路径。应该有一种方法可以在一个地方为所有测试用例实现这一点。@Value(${spring.data.rest.basePath}”)字符串basePath然后是basePath+“/”