多个@RequestParam的Spring验证

时间:2017-10-13 16:42:33

标签: java spring spring-validator http-request-parameters

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

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

如果消费者在没有param1 param2的情况下为此API执行@Get,Spring将抛出&#34; MissingServletRequestParameterException&#34;但是用于param1但是param2

我的问题是,如果消费者没有通过 param1和param2,我们能否以某种方式获得两者 param1和param2的MissingServletRequestParameterException?

请指教我

1 个答案:

答案 0 :(得分:0)

首先,由于您已在范围内重新声明了变量,因此此代码将无法编译。此外,如果我正确理解了这个问题,如果你重构给定的代码片段(以便编译),那么当注意到第一个必需参数丢失时,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。