Spring Boot如何处理GET请求中的多个参数

3

我是新手使用Spring Boot框架。 我想创建一个@GetMapping,根据用户在参数中输入的内容,无论是Property1 Name(字符串)还是Protery2 Designation(字符串)还是Property3 Salary(整数),该方法都应能够基于一个或多个属性获取员工列表。 我可以创建单独的方法,但我不想这样做。 我想做类似这样的事情:

@GetMapping("/employee")
public List<Employee> getEmployee(Params parameters)
{
    // Filter the list based on parameters provided and return the list
}

另外,我不明白如何处理参数。例如,如果它是整数,则只有一列,但如果用户输入字符串,则有两列。如果用户未指定参数名称,则我必须处理它。

您应该查看 @RequestParam https://www.baeldung.com/spring-request-param - Ryuzaki L
请查看此答案 - R.G
3个回答

9
你可以使用@RequestParam Map<String, String> params将所有参数绑定到一个变量中。
例如:
@RequestMapping(value="/params", method = RequestMethod.GET)
public ResponseEntity getParams(@RequestParam Map<String, String> params ) {

   System.out.println(params.keySet());
   System.out.println(params.values());

   return new ResponseEntity<String>("ok", HttpStatus.OK);
}

传递多个键值对的URL模式将是什么? - c.sankhala
1
@c.sankhala,模式将是/params?key=value&key1=value1。 - Vishal Sharma

5
您可以使用@RequestParam注释定义三个参数,并检查哪个非空:
@GetMapping("/employee")
public List<Employee> getEmployee(@RequestParam(defaultValue = "empty") String name, @RequestParam(defaultValue = "empty") String designation, ....
{
    // check which one is not empty and perform logic
    if (!name.equals("empty")) {
      // do something 
  }
}

关于用户选择的参数:您可以制作一个下拉菜单或简单的单选按钮,让用户自己选择搜索条件(其中每个条件都映射为一个请求参数)。例如:

输入图像描述


你也可以使用 @RequestParam(required = false) String name 并检查 null 值。 - theBittor
这是真的。我只是不确定检查 null 是否是一个好的实践。 - Petar Bivolarski
我们可以在模型中使用验证来检查 null 值吗?但是,当涉及到请求参数的空值检查时,这是一个好的实践吗? - user12192074
是的,我们可以使用Spring注解来验证我们模型属性的空值。关于请求参数空值检查,我找不到任何信息表明这是一种好的做法,所以我猜没有问题使用它(Spring文档中也没有关于此的说明,所以我认为这是可以的:https://docs.spring.io/spring/docs/current/javadoc-api/org/springframework/web/bind/annotation/RequestParam.html)。 - Petar Bivolarski

0

正如其中一个答案的评论所述,我们还可以为每个参数指定@RequestParam(required = false)并检查 null 值。

例如:

@GetMapping("/employee")
public List<Employee> getEmployee(
    @RequestParam(required = false) String optionA,
    @RequestParam(required = false) String optionB) {
  // Check what parameter is not null
  if (optionA != null) {
    // Do something
  }
  ...
}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接