Spring REST API搜索/过滤器设计

我有一个类似这样的网址

GET  /users?filters[status]=active&filters[org][country]=IND&page[offset]=10&page[limit]=10&include[]=resource1&include[]=resource2

在spring get方法中绑定请求参数的最佳方法是什么

mintz2004 回答:Spring REST API搜索/过滤器设计

您可以创建一个过滤器对象,以将正文请求传递给GET方法:

Filter : {
    status:"active"
    org : {
           country :"IND"     
           }
...

}
,

使用HTTP GET方法时,有两种方法可以在URL中附加查询,  @RequestParam & @PathVariable,但两者都有完全不同的方法。 通过查看URL本身,可以轻松地区分所使用的方法。 在您的情况下,必须使用@RequestParam:

GET /users?filters[status]=active&filters[org][country]=IND&page[offset]=10&page[limit]=10&include[]=resource1&include[]=resource2

在此处查看代码段:-

@RequestMapping("/hello")  

    public String display(@RequestParam("name") String name,@RequestParam("pass") String pass,Model m)  
    {  
        if(pass.equals("admin"))  
        {  
            String msg="Hello "+ name;  
            //add a message to the model  
            m.addAttribute("message",msg);  
            return "viewpage";  
        }  
        else  
        {  
            String msg="Sorry "+ name+". You entered an incorrect password";  
            m.addAttribute("message",msg);  
            return "errorpage";  
        }     
    }  
}  

您可以创建一个单独的POJO(包含所有键作为私有字段以及getter和setter的类),并使用@ModelAttribute作为方法参数 这样可以使代码整洁,并增加易懂性和便利性。

public class POJO{
String resouce1;
String resource2;
//getters & setters
}

在Controller类中:

@RequestMapping(/path)
public String addProduct(@ModelAttribute POJO mypojo)
{
//statements
//statements
}

希望这会有所帮助。 希望您提出任何进一步的疑问。

谢谢。

,

为GET API(Web服务)绑定请求参数取决于业务需求。 当您使用“ GET”方法设计Rest API时,有几点要考虑。

1)最重要的是使用标准的“ GET”方法是从数据库或任何其他数据存储库中检索数据。

2)绑定请求参数时,应考虑API的要求。根据业务需求,主要有两种类型的参数。强制参数和可选参数。除Rest Web服务外,还使用路径变量(@PathVariable)和请求参数(@RequestParam)映射上述参数类型

3)例如,有一个用于按订单ID搜索订单的API。因此,如果没有订单ID,则无法搜索订单。订单ID应该是必填项。在设计此用例的API时,应使用@PathVariable。这是一种良好的编码习惯。 @PathParam从调用的URI的路径部分读取值。

4)@RequestParam可用于实现可选参数。请求参数作为键值对传递,因此它们的顺序与多个请求参数无关。

5)您可以根据需要添加路径变量并请求多个参数。

6)然后,URL取决于路径变量和请求参数。 URL设计如下。在添加所有路径变量后添加请求参数,并用问号()分隔,您可以添加更多用&符号分隔的请求参数(

http://www.example.com/ /?requestParamName = )

GET方法中的PathVariable实现

@RequestMapping(value = "/orders/{id}",method = RequestMethod.GET)
@ResponseBody
public String getOrder(@PathVariable final String id) {
  return "Order ID: " + id;
}

GET方法中的RequestParam实现

@RequestMapping("/trades",method = RequestMethod.GET)
public String showTradeDetails(@RequestParam String tradeId,Model model){
  model.addAttribute("tradeId",tradeId);
  return "tradeDetails";
}
,

在本文Spring Boot: How to design efficient REST API?中,我解释了如何开发用于搜索的REST API。例如,您在本文中找到了邮递员的代码和屏幕截图。 实时测试API也可能是这样的: https://efficient-search-api.herokuapp.com/api/cars?country=USA&sort=createDate,desc&limit=100&offset=2

作为一个端点的优化,我可以得到几个结果:对资源进行排序,过滤和分页。

您无需处理大量代码(检查查询参数和控制器中的所有控件):库规范-arg-resolver使其毫无问题

,

强烈建议在GET调用中传递这么多查询参数,以防您有太多参数,最好转换POST类型的api。

本文链接:https://www.f2er.com/3111374.html

大家都在问