我有很多操作。 用户必须能够搜索资源的许多字段。 有些人大约有10人。
我可以使用RequestParam,但是方法会有很多参数,而且习惯上这不是一个很好的实践。
/card?id=2&imso=trx&icco=98x&type=23&scm=988&createat=2017-02-01
还有其他好的解决方案吗?
答案 0 :(得分:1)
这里有两个问题,取决于对您有何重要性 - 您可以找到解决方案。
问题#1:客户端的长REST URL
问题#2:控制器方法有长&复杂的签名
解决方案1:您将@RequestParam
分组为可选&必需参数然后您只为可选参数创建DTO。然后,您可以使用controllerMethod(@RequestParam param1 , @RequestParam param2, DTO dto)
等控制器方法签名。
请注意,您不能在DTO之前使用@RequestBody
。
DTO的值将像之前一样在客户端URL本身中传递,Spring MVC会自动将其转换为DTO。
当您将请求类型保留为GET
假设通常强制参数只有少数,并且总是有很长的可选字段列表。
解决方案2 :您更改服务器端以将GET
请求转换为POST
并开始接受@RequestBody
DTO。这解决了这两个问题,但您的原始API更改为POST类型。
据我所知,在大多数情况下,将GET更改为POST不应该成为问题,反之亦然。