java - SpringBoot : requestParam value validation when required=false

标签 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”是否已正确发送(如果已发送)。不是值,而是 key 本身。注意:requestParams 不是必填字段。

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

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

我希望代码能够验证请求参数是否不正确。我尝试了@Validate注释和@Valid注释。两者都不起作用。

当像上面这样进行不正确的调用时,代码将通过,因为这些字段不是强制性的。

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

最佳答案

REST 调用的验证无法以这种方式进行。
这将验证发送参数的值,而不是它们的名称。
因此,当参数的 required 属性设置为 false 时,不会发生违规约束。
Jackson 处理可能会忽略发送参数的无效名称。
如果你想执行这样的验证,你应该使用自定义 validator 或自定义验证。

例如:

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);
}

关于java - SpringBoot : requestParam value validation when required=false,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50955138/

相关文章:

java - 使用继承时Spring Boot Swagger重复模型类型

java - Spring Cloud Stream RabbitMQ 多个接收者

java - 访问已编译的 jar/war 文件之外的文件

java - 获取数据库行锁失败 : No row exists in table QRTZ_LOCKS for lock named: TRIGGER_ACCESS

java - 将三个表内连接到 java DTO

java - 在Java中存储多个变量的好方法?

java - EIP/Apache Camel - 如何同时处理消息,但按组原子处理?

java - 使用 SQL (Postgres) 触发表锁的 native 查询

java - Android开发中Java如何存储程序逻辑数据?

java - SpringApplicationRunListeners 与 SpringApplicationRunListeners 对比应用监听器