[英]How to get the RequestParam name in ConstraintViolationException when field validation fails in SpringBoot
[英]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.