当请求参数互斥时,在@Controller方法上设计API的更好方法是什么?
代码是:
public ResponseEntity getList(@RequestParam(required = false) Integer userId,@RequestParam(required = false) User.Type userType,@RequestParam(required = false) Integer age) {
List
这是重点:
用户无法使用多个请求参数进行查询.只有一个请求参数或没有请求参数有效(请求中只应存在userId,age或type中的一个).
我不确定为这种情况设计API的更好方法是什么.你能给我一些建议吗?
最佳答案
我喜欢这些家伙在评论中建议的方法:
@RequestMapping(value = "...",params = {"!userType","!userAge"})
public ResponseEntityaram Integer userId) { ... }
// similarly,define two more
在您开始管理每个端点的限制之前,它看起来健壮且可行.它看起来很乏味,很难维护.此外,我不确定没有参数的终点会如何反应.是否会被其他方法调用或遮蔽?
我建议引入条件 – 每个端点的要求,而不是写限制.它可以是Map< String,Function< String,List< User>>>在下一格式中:
aram name> ->
我还建议你将所有传入的请求参数收集到一个Map< String,String>按大小验证它.
public class Controller {
private Maparam Maparams) {
if (params.size() > 1) {
return ResponseEntity.unprocessableEntity().build();
}
if (params.size() == 0) {
return ResponseEntity.ok(getAllWithoutCondition());
}
Map.EntryaramEntry = params.entrySet().iterator().next();
return ResponseEntity.ok(handlers.get(paramEntry.getKey()).apply(paramEntry.getValue()));
}
private List
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。