这是我的方法代码:
@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会传入什么参数。如果我有此信息,则可以进行验证。
答案 0 :(得分:1)
以这种方式无法进行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);
}
答案 1 :(得分:0)
您可以使用@RequestParam Map<String,String> allRequestParams
获取包含所有params字段和值的地图。然后,您可以使用containsKey来检查字段。