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

Spring Boot Rest Web 服务在获取请求中获取多个参数

施知
2023-03-14

我正在创建 Spring Boot Web 服务,我有一个模范员工

public class Employee {
  private String id;
  private String name;
  private String designation;
  private int salary;
 //Has Getters and Setters
}

我想创建一个Get请求,它将根据用户给定的参数获取和过滤员工列表。

例如,如果用户提供员工的姓名和员工的指定,则 get 方法应筛选这些结果。对于各种参数组合,它应该可以工作。

@Override
    public List<Employee> getEmployees(Map<String, Object> parameters) {
        if (parameters.size() == 0)
//          code to return all employees;
        List<Employee> selectedEmployees = new ArrayList<Employee>();
        for(Employee currentEmployee: new ArrayList<Employee>(employee.values())) {
            for(Map.Entry<String, Object> check: parameters.entrySet()) {
                try {
                    if(check.getValue() instanceof Integer) {
                        int condition = (int) Employee.class.getMethod("get" + check.getKey()).invoke(currentEmployee);
                        if((int) check.getValue() == condition)
                            selectedEmployees.add(currentEmployee);
                    } else if (check.getValue() instanceof String) {
                        String condition = (String) Employee.class.getMethod("get" + check.getKey()).invoke(currentEmployee);
                        if (((String) check.getValue()).equals(condition))
                            selectedEmployees.add(currentEmployee);
                    }
                } catch(Exception e){
                    e.printStackTrace();
                }
            }
        }
        return selectedEmployees; 
    }

为了避免多个if else情况,我根据上面的字符串和整数过滤列表。

我想我在下面的代码中犯了一个错误,该代码在控制器中发送请求。

@RequestMapping(value={"/employees","/{id}/{name}/{designation}/{salary}"})
    public List<Employee> getEmployeeByProperty(EmployeeRequestParameters requestParams){
        //Map for storing parameters to filter the List
        Map<String, Object> filterParams = new HashMap<>();
        if(requestParams.getIdParam().isEmpty()) {
            filterParams.put("id", Integer.parseInt(requestParams.getIdParam()));   
        } 
        if(!requestParams.getNameParam().isEmpty()) {
            filterParams.put("name", requestParams.getNameParam()); 
        } 
        if(!requestParams.getDesignationParam().isEmpty()) {
            filterParams.put("designation", requestParams.getDesignationParam());   
        } 
        if(requestParams.getSalaryParam().isEmpty()) {
            filterParams.put("salary", Integer.parseInt(requestParams.getSalaryParam()));   
        }       
        return EmployeeService.getEmployeesByProperty(filterParams);
    }

共有1个答案

荆煌
2023-03-14

如果{id}字段不完整,{name}或{designation}或}salary}将为空。{name}或{designation}或}salary}为full Because应为{id}full。

@GetMapping("/employees")
public List<Employee> getEmployeeByProperty(@RequestParam(value = "id", required=false) String id,
                                            @RequestParam(value = "name", required=false) String name,
                                            @RequestParam(value = "designation", required=false) String designation,
                                            @RequestParam(value = "salary", required=false) int salary) {
                                                //Your codes
                                            }

即使{id}为空,也可以使用其他。

 类似资料:
  • 问题内容: 我想知道如何一次获取多个GET URL,然后将获取的JSON数据放入我的React DOM元素中。 这是我的代码: 但是,我想从服务器中获取其他JSON数据,然后使用传递到其中的所有这些JSON数据呈现我的ReactDOM。例如: 这可能吗?如果不是,将多个JSON数据提取到我的渲染ReactDOM元素中的其他解决方案是什么? 问题答案: 您可以在解决方案之前依靠Promises来执行

  • 问题内容: 我的问题是给定的代码: 我访问: 我应该期望[‘a’,’bbb’]的输出,除了Flask似乎只接受第一个参数而忽略其余参数。 这是Flask的限制吗?还是设计使然? 问题答案: 你可以使用与Django类似的,但由于某些原因,Flask文档中未提及: 结果是: 使用如果参数是查询字符串(如题),如果值来自具有相同名称的多个表单输入。 结合了两者,但通常应避免使用更具体的集合。

  • 问题内容: 如何在Jinja2模板中检索请求参数? 问题答案: 我对这个答案有些迟,但是其他解决方案并不能真正解决你使用Flask的问题。 将Flask与Jinja2一起使用的事实使你的情况与其他框架有所不同。Flask实际上使所有Jinja2模板中都可以使用一些全局变量,而无需你将它们显式传递给模板。 在http://flask.pocoo.org/docs/templating/#standa

  • 问题内容: 我有一个组件。在其中,我在组件中有一个页面。我要访问的值从页面(一个inputText的或单选按钮的)在我的管理bean类。请指导我如何去做。请在这里注意,我不想在这里使用会话。我只需要请求。我尝试了以下选项,但它们对我没有用。 选项一 选项二 选项三 选项四 选项五 我希望该值不在jsp的托管bean中……但我希望在另一个托管bean中获得。在这里,我在页面内有页面(正如我之前提到的

  • 我试图建立一个基本的网页,允许用户在数据库的mysql表中添加一行,以便打开LED灯和使用arduino。然而,当我尝试提交表单时,页面返回500状态,mysql查询没有执行。我在我的电脑上运行linux-apache-mysql-php服务器。为什么会这样?

  • 主要内容:通过 HttpServletRequest 获取请求参数,通过形参获取请求参数,使用 @RequestParam 注解获取,通过实体类对象获取(推荐),解决获取请求参数的乱码问题Spring MVC 提供了多种获取请求参数的方式: 通过 HttpServletRequest 获取请求参数 通过控制器方法的形参获取请求参数 使用 @RequestParam 注解获取请求参数 通过实体类对象获取请求参数(推荐) 下面我们就对这些获取请求参数的方式一一进行介绍。 通过 HttpServlet