【发布时间】:2020-07-27 22:59:03
【问题描述】:
我有一个带有可选请求参数的 Spring REST 端点,如下所示:
public ResponseEntity<Product> globalProduct(@RequestParam Optional<Integer> id, @RequestParam Optional<String> name){
return ResponseEntity.ok(tm));
}
当我尝试测试这个使用 Mockito 框架的端点时
@Test
public void testGlobalProduct() throws Exception {
URI uri = UriComponentsBuilder.fromPath("/api/products")
.queryParam("id", Optional.of(1)
.queryParam("name", Optional.empty())
.build().toUri();
mockMvc.perform( MockMvcRequestBuilders.get(uri)
.accept(MediaType.APPLICATION_JSON))
.andExpect(status().isOk())
.andExpect(content().contentType(MediaType.APPLICATION_JSON))
.andDo(MockMvcResultHandlers.print())
.andReturn();
}
所以 queryParams id 和 name 应该是 Optional.of(1) 和 Optional.empty() ,但是当我在 rest api implementationaion 中调试时,我看到 id 和 name 已经用值 Optional[Optional[1]] 包装了和Optiona[Optional.empty]]。
我知道我可以使用 @RequestParams(required=false) 但我不想在这种情况下使用这种方式。
我们如何解开 Optional[Optional[1]] Optiona[Optional.empty]] 这是正确的吗?请问有什么建议吗?
提前致谢!
【问题讨论】:
标签: java spring-boot rest