【问题标题】:Url changes if i don't pass api parameters如果我不传递 api 参数,网址会更改
【发布时间】:2019-10-12 20:27:40
【问题描述】:

如果我不传递搜索参数,URL 会发生我不想要的更改,我有一个用于搜索操作和获取操作的通用 api。

例如: 如果传递了搜索参数: 本地主机:8080/api/search?name=harmeet

如果没有传递搜索参数: 本地主机:8080/api/搜索

我想要的是无论我是否传递参数,url都不应该改变

例如 如果我不传递参数,则 url 应该是: localhost:8080/api/search?name=''

代码是用spring boot写的

【问题讨论】:

  • 我能问一下你为什么不想要这种行为吗?保持原样似乎很明智。
  • 所以...传递参数,并将其设置为空字符串...
  • @JRK 由于我需要这样做的一些要求。有什么办法吗?
  • 您可以简单地设置一个默认值来避免这种行为。

标签: spring spring-boot


【解决方案1】:

调用什么 URL 取决于客户端而不是服务器端。如果您总是希望参数值在客户端不传递时为某值或“”,则可以将控制器方法定义为:

@GetMapping("/api/search")
public Object getName(@Requestparam(value="name",required=false,defaultValue="")String name){
// your logic here
// value of 'name' variable will "" if nothing is passed
}

如果 URL 调用中没有提供参数,只需将必填字段设置为 false 并使用 defaultValue 字段设置您想要设置的任何默认值。

【讨论】:

    【解决方案2】:

    据我了解,您想要创建处理两个 API 调用的 API。

    比如,

    http://localhost:8080/search

    http://localhost:8080/search?name=hermeet

    我以为你已经在后端创建了 API……对了!!!

    因此,您的逻辑没有任何问题,但您在方法中定义的参数默认是必需的。

    这不允许您传递 null 或空值。

    您只需要允许您的参数适用于这两种情况。 如下几种方式,

    1. 可选 parameter_name
    2. @RequestParam(value = "parameter_name", required = false) 字符串变量

    示例:

    @GetMapping("/search")
    public List<Entity> getSearchResult(@RequestParam(value = "parameter_name", required = false) String variable) {
       if(variable!=null) { 
          // Get Data based on condition.
       } else {
          // Get All Data
       }
    }
    
    @GetMapping("/search")
    public List<Entity> getSearchResult(@RequestParam("parameter_name") Optinal<String> variable) {
       if(variable.isPresent()) { 
          // Get Data based on condition.
       } else {
          // Get All Data
       }
    }
    

    【讨论】:

      猜你喜欢
      • 2012-06-21
      • 1970-01-01
      • 1970-01-01
      • 2012-03-13
      • 1970-01-01
      • 2023-03-20
      • 2016-04-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多