当前位置: 首页 > 知识库问答 >
问题:

@RequestParam,带有可选的Spring REST

楚昀
2023-03-14

我有一个Spring RESTendpoint,具有如下所示的可选请求参数:

public ResponseEntity<Product> globalProduct(@RequestParam Optional<Integer> id, @RequestParam Optional<String> name){

return ResponseEntity.ok(tm));
}

当我试图测试这个使用Mockito框架的endpoint时

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

提前感谢!

共有1个答案

纪实
2023-03-14

这是因为您在查询参数中传递了一个可选的参数,该参数再次包装在一个可选的at控制器层中。试着跟随并检查。

@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();                                                           
} 
 类似资料:
  • 我有一个接口方法,可以如下所示调用- 它可以接受类型的param,这样我就可以获取特定的结果。 现在,如果将paramIds保留为空,如下所示,Spring MVC将创建,大小为0,并且不会返回结果。 这是我的注释 我试图删除并使用,但无法将设置为。 现在,我将注释更改为,并在dao中添加代码将“none”处理为null--想知道是否有更好的方法来解决这个问题。 提前谢了。

  • 目标是发送一个HTTP GET请求,其中包含表示枚举值的字符串列表问卷主题,然后使用这些参数选择正确主题的问题。我还添加了一个自定义转换器来将接收到的字符串转换为我的枚举。我的问题是当我在方法中调试时,“主题”总是为空。 这是我当前的RESTendpoint: 当我通过带有以下签名的方法传递单个主题时,我能够得到我的问题: 因此,将字符串转换为枚举似乎不是问题。 我尝试发送多个请求,但在endpo

  • 我有一个有组的模式。这些组都是可选的。 完整的posible模式是: 但也可以看起来像这样 不可能在组中获得限定词,例如(组A不可能' = ')。 所以我尝试了这些正则表达式: 问题: 如果缺少组,则不匹配 具有“#”(E)的组包含第一个组“-”(F)<ul> 001.002 可编程逻辑控制器。003 M01.001 P1 测试-KF2-- 我的错是什么?

  • 所以基本上我有我的rootFolderId在我的application.properties 我需要把它放到控制器里 并在@RequestParam中使用它,例如: 但是我遇到了“属性值必须是常数”的问题。有什么方法可以让它工作吗?

  • 我有一个请求,比如我必须为此编写GET。要求是,当我有一个值时,响应必须是来自数据库的特定记录“xyz”。但是如果请求是即没有值,它必须从数据库中检索所有值。 为了实现这一点,我在请求中加入了(@RequestParam(value=“name”,required=false)字符串名)。i、 e将该值标记为可选 但问题是当我的请求是也就是说,如果没有值,我必须将“request is inval

  • Spring控制器有可能同时处理这两种请求吗? 1) 2) 如果我定义了一个这样的控制器: