假设我有一个@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?
请指教我
答案 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。