【问题标题】:Spring Validation for multiple @RequestParam多个@RequestParam的Spring验证
【发布时间】:2017-10-13 16:42:33
【问题描述】:

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

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

如果消费者在没有参数1参数2的情况下为此API执行@Get,Spring将抛出“MissingServletRequestParameterException”但为参数1但参数2

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

请给我建议

【问题讨论】:

  • 我认为唯一的价值就是让 requestparma required=false 然后只检查方法中的值,然后抛出适当的异常。
  • 要么使用Map&lt;String, String&gt;,要么为您的请求参数构建自定义验证器。
  • 谢谢。让我研究一下 Map
  • 谢谢阿米特,问题是不要为简单的空和空验证编写我们自己的代码。抱歉,问题不清楚

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


【解决方案1】:

首先,此代码不会编译,因为您在范围内重新声明了一个变量。此外,如果我正确理解了这个问题,如果你重构给定的代码 sn-p(以便它编译),当注意到缺少第一个必需参数时,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"));
    }

除了你想抛出的异常。如果您想这样做,请将“必需”标志的值设置为 false。

【讨论】:

  • 1.回答问题时最好不要使用缩写,有可能有人不会解码它。 2. 我建议使用Optional 类进行null 检查。 Java 8 的出现是很久以前的事了。
  • 谢谢。代码不是实际代码,我只是输入问题。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-12-01
  • 1970-01-01
  • 2011-11-16
  • 2018-08-13
  • 2018-01-17
  • 2019-10-14
相关资源
最近更新 更多