繁体   English   中英

多个@RequestParam的Spring验证

[英]Spring Validation for multiple @RequestParam

假设我有一个@GetMapping的RestController,如下所示

ResponseEntity<?> getXXX(
@RequestParam(value = "param1", required = true) String param1,
@RequestParam(value = "param2", required = true) String param1)

如果使用者对此API执行@Get而不使用param1 param2,则Spring会抛出“ MissingServletRequestParameterException”,但针对param1而非param2

我在这里的问题是,如果消费者没有通过这两个参数1和参数,我们可以某种方式得到MissingServletRequestParameterException 两个参数1和参数?

请告诉我

首先,由于您已在作用域内重新声明了变量,因此无法编译此代码。 而且,如果我正确理解了这个问题,如果您重构给定的代码段(以便进行编译),则在通知缺少第一个必需参数时,spring将引发异常,就像jvm在类似情况下仅抛出有关异常信息的NullPointerException异常一样符合例外:

String a = null;
String b = null;
a.length();      //NullPointerException exception thrown
b.length();

您必须创建自定义验证器,以检查是否在请求中指定了参数,如果没有,则抛出适当的异常。 就像是:

void validate(String param1, String param2) {
        Stream.of(param1, param2).filter(Objects::nonNull).findAny().orElseThrow(() -> new IllegalArgumentException("param1 and param2 are missing"));
        Optional.ofNullable(param1).orElseThrow(() -> new IllegalArgumentException("param1 is missing"));
        Optional.ofNullable(param2).orElseThrow(() -> new IllegalArgumentException("param2 is missing"));
    }

除了您要抛出的异常。 如果要用这种方法,请将“ required”标志的值设置为false。

暂无
暂无

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

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