繁体   English   中英

SpringBoot:requestParam值验证,当required = false时

[英]SpringBoot: requestParam value validation when required=false

这是我的方法代码:

@RequestMapping(value="/api/restcall", method=GET)
public response methodcall (@RequestParam (value="testId", required=false) String testId, @RequestParam (value="requestId", required=false) String requestId){
//some code
}

我想验证请求参数。 不是值,而是字段本身。

API调用:

localhost:8080/api/restcall?requestId=abcd&testId=xyz

我想验证是否正确发送了“ requestId”和“ testId”。 不是价值,而是钥匙本身。 注意:requestParams不是必填字段。

因此,如果进行以下API调用:

localhost:8080/api/restcall?request=abcd&test=xyz

我希望代码验证requestparams不正确。 我尝试了@Validate注释和@Valid注释。 两者都不起作用。

当像上面那样进行错误的调用时,由于字段不是强制性的,因此代码正在处理中。

我想知道如果没有发送testId和requestId会传入什么参数。如果我有此信息,则可以进行验证。

REST调用的验证无法通过这种方式进行。
这将验证已发送参数的值,而不是它们的名称。
因此,由于参数的required属性设置为false ,因此不会发生冲突约束。
Jackson参数处理可能会忽略已发送参数的无效名称。
如果要执行这样的验证,则应使用自定义验证器或自定义验证。

例如 :

String errorMsg = ""; 
if (StringsUtil.isEmpty(testId)){ 
    errorMsg+="testId param name missing";
}
if (StringsUtil.isEmpty(requestId)){ 
    errorMsg+="requestId param name missing";
}
if (!errorMsg.equals("")){
   throw new ValidationException(errorMsg);
}

您可以使用@RequestParam Map<String,String> allRequestParams获得具有所有params字段和值的@RequestParam Map<String,String> allRequestParams 然后,您可以使用containsKey来检查字段。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM