【问题标题】:SpringBoot auto trim spaces in the @RequestParam list if there is only 1 parameter is provided如果仅提供 1 个参数,则 SpringBoot 自动修剪 @RequestParam 列表中的空格
【发布时间】:2020-04-07 11:24:39
【问题描述】:

我有一个支持按多个值过滤的 REST API:

@GetMapping("/employees")
public ResponseEntity<List<Employee>> getAllEmployees(
            @RequestParam(name = "role", required = false) List<String> roles) {

}

根据提供的信息调用此 API:/employees?role= ADMIN 那么 List 角色将有 1 个元素:

  • 角色=管理员 (没有标题空间)

但是当我使用多个角色调用此 API 时:/employees?role= ADMIN&role=STUDENT 那么角色将有 2 个元素:

  • role= ADMIN(带有标题空间)
  • 角色=学生

我怎样才能避免这里自动修剪空格?

谢谢

【问题讨论】:

  • 您在调用 API 之前尝试过 URL 编码吗?或者您通过现成的客户端(例如 Postman)拨打电话?
  • 我通过 Postman 调用了这个 API

标签: spring-boot http-request-parameters


【解决方案1】:

您可以在您的方法中尝试此指令以自动修剪列表中的空间

List<String> rolesWithoutSpaces = roles.stream().map(String::trim).collect(Collectors.toList());

【讨论】:

    【解决方案2】:

    您可以像这样简单地拨打电话,

    /employees?role= ADMIN,STUDENT
    

    由于这些值是逗号分隔的,Spring Controller 默认会将它们解释为List&lt;String&gt; roles 的两个不同值。

    如果您随后在控制器中打印它们,您会看到所有空白区域都会自动修剪。

    for (String s : roles) System.out.println("Role :" + s); 在控制器内部,我的日志是,

    Role :ADMIN
    Role :STUDENT
    

    【讨论】:

      猜你喜欢
      • 2020-09-09
      • 2015-11-13
      • 2019-07-31
      • 1970-01-01
      • 2013-08-02
      • 2012-03-07
      • 2017-03-16
      • 1970-01-01
      • 2012-05-16
      相关资源
      最近更新 更多