2017-10-13 101 views
0

假设我有一个@GetMapping一个RestController如下春天验证多个@RequestParam

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

如果消费者对这个API进行@Get无参数1 参数2,Spring会抛出“MissingServletRequestParameterException”,但的参数1但是参数2

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

请咨询我

+0

我认为唯一的价值是通过使requestparma required = false,然后检查方法中的值,然后抛出适当的异常。 –

+0

使用'Map '或为您请求参数构建自定义验证器。 – imk

+0

谢谢。让我研究一下Map

回答

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。

+0

1.最好不要在你回答问题时使用缩写,有人可能不会解码它。 2.我会建议使用'可选'类进行'空'检查。很久以前Java 8出现了。 – DevDio

+0

谢谢。代码不是实际的代码,我只是输入它的问题。 –