gpt4 book ai didi

java - @RequestParam 和可选的 Spring REST

转载 作者:行者123 更新时间:2023-12-02 08:43:44 25 4
gpt4 key购买 nike

我有一个带有可选请求参数的 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实现中调试时,我看到idname 已用值 Optional[Optional[1]]Optiona[Optional.empty]] 包装。

我知道我可以使用 @RequestParams(required=false) 但我不想在这种情况下使用这种方式。

我们如何解开 Optional[Optional[1]] Optiona[Optional.empty]] 这是否正确?请问有什么建议吗?

提前致谢!

最佳答案

这是因为您在查询参数中传递了一个可选参数,该参数再次包装在 Controller 层的可选参数中。尝试遵循并检查。

@Test                                                                               
public void testGlobalProduct() throws Exception {
URI uri = UriComponentsBuilder.fromPath("/api/products")
.queryParam("id", 1)
.build().toUri();
mockMvc.perform( MockMvcRequestBuilders.get(uri)
.accept(MediaType.APPLICATION_JSON))
.andExpect(status().isOk())
.andExpect(content().contentType(MediaType.APPLICATION_JSON))
.andDo(MockMvcResultHandlers.print())
.andReturn();
}

关于java - @RequestParam 和可选的 Spring REST,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61220850/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com