SpringBoot:必选时为requestParam值验证= false

时间:2018-06-20 18:49:37

标签: java spring spring-boot

这是我的方法代码:

@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会传入什么参数。如果我有此信息,则可以进行验证。

2 个答案:

答案 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来检查字段。