我有一个类似这样的网址
GET /users?filters[status]=active&filters[org][country]=IND&page[offset]=10&page[limit]=10&include[]=resource1&include[]=resource2
在spring get方法中绑定请求参数的最佳方法是什么
您可以创建一个过滤器对象,以将正文请求传递给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。