如果我像这样形式化我的方法:
@GetMapping("/dl4j/getWordVector")
public ResponseEntity<List<Double[]>> getWordVector(String modelName, String word) {
// ...
}
并省略参数,我不会看到MissingServletRequestParameterException
.这仅在我使用 @RequestParam
时才有效:
@GetMapping("/dl4j/getWordVector")
public ResponseEntity<List<Double[]>> getWordVector(@RequestParam(value="modelName", required = true) String modelName, String word) {
// ...
}
为什么会这样呢?恕我直言,这应该是一个选择退出,因为我想 REST API 中的大多数参数都是必需的,不是吗?
@RequestParam
不是为REST发明的,它是为表单提交和URL请求而发明的,在这些情况下,参数很少是可选的。
有些人会争辩说,我们应该@PathParam
访问 RESTfull 资源,但如果参数是可选的,@PathParam工作会更糟,因为排序很重要。
您需要记住的另一件事是,参数名称不会自动成为字节码的一部分,参数名称仅在使用调试信息编译时才可用,这就是您需要注释的原因。 查看此链接以获取更多信息