多个请求参数,休息哲学和良好的实践

时间:2017-06-26 18:16:21

标签: rest spring-restcontroller spring-rest

我有很多操作。 用户必须能够搜索资源的许多字段。 有些人大约有10人。

我可以使用RequestParam,但是方法会有很多参数,而且习惯上这不是一个很好的实践。

/card?id=2&imso=trx&icco=98x&type=23&scm=988&createat=2017-02-01

还有其他好的解决方案吗?

1 个答案:

答案 0 :(得分:1)

这里有两个问题,取决于对您有何重要性 - 您可以找到解决方案。

问题#1:客户端的长REST URL

问题#2:控制器方法有长&复杂的签名

解决方案1:您将@RequestParam分组为可选&必需参数然后您只为可选参数创建DTO。然后,您可以使用controllerMethod(@RequestParam param1 , @RequestParam param2, DTO dto)等控制器方法签名。

请注意,您不能在DTO之前使用@RequestBody

DTO的值将像之前一样在客户端URL本身中传递,Spring MVC会自动将其转换为DTO。

当您将请求类型保留为GET

时,这解决了复杂的控制器方法签名,但没有长URL问题

假设通常强制参数只有少数,并且总是有很长的可选字段列表。

解决方案2 :您更改服务器端以将GET请求转换为POST并开始接受@RequestBody DTO。这解决了这两个问题,但您的原始API更改为POST类型。

据我所知,在大多数情况下,将GET更改为POST不应该成为问题,反之亦然。