java - Spring REST 模拟上下文路径

标签 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(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]

怎么了? 是否可以在代码中的单个位置指定 contextPath,例如直接在构建器中?

编辑

这里是 Controller

@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/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())));
}

关于java - Spring REST 模拟上下文路径,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35435631/

相关文章:

java - 断言 JMockit 期望结果与构造的实例相同

java - 无法解决 DispatcherServlet 的 ClassNotFoundException(在 Spring 上)

java - JSF 2 Spring XRebel 大型 session

css - 模板化并尝试从 CSS 文件中引用上下文路径

Java Collection、Set、Map 或 Array 来保存唯一排序的非空白字符串

java - 通过从 EditText 输入纬度和经度计算两个位置之间的距离

java - 执行java if/else语句时出现逻辑错误

Spring MVC 表单设置字段为 null

java - 如何删除java应用程序中的上下文路径