Spring boot 对于@RequestParam控制器方法参数,是否可以使用@Nullable代替required=false?
似乎有两种记录在案的方法将弹簧控制器方法的参数标记为可选: (1)将Spring boot 对于@RequestParam控制器方法参数,是否可以使用@Nullable代替required=false?,spring-boot,spring-mvc,Spring Boot,Spring Mvc,似乎有两种记录在案的方法将弹簧控制器方法的参数标记为可选: (1)将required=false添加到注释: public String books(@RequestParam(name = "category", required = false) String category) { public String books(@RequestParam(name = "category") Optional<String> category) { public String b
required=false
添加到注释:
public String books(@RequestParam(name = "category", required = false) String category) {
public String books(@RequestParam(name = "category") Optional<String> category) {
public String books(@Nullable @RequestParam(name = "category") String category) {
(2)将参数类型更改为:
public String books(@RequestParam(name = "category", required = false) String category) {
public String books(@RequestParam(name = "category") Optional<String> category) {
public String books(@Nullable @RequestParam(name = "category") String category) {
我更喜欢#3,但如果有文档记录,我会觉得使用它更好。我已经搜索了文档,但我能找到的只是@Nullable: 一个公共Spring注释,用于声明注释的元素可以 在某些情况下无效 我找不到一个显示与
@RequestParam
一起使用的@Nullable
的示例
有人知道这是否被记录在哪里吗?
@Nullable
是一个众所周知的注释,可以应用于字段、方法和参数。知道它的受欢迎程度,Spring可能不介意不提它。所以,使用它时感觉很爽
现在来选择使用验证:我要么选择@Nullable
要么选择required=false
Optional
在Java8中用于防止NullPointerException
。所以,谢谢你的回答。我同意不为此使用可选。人们似乎普遍认为,可选
不应用于请求参数。事实上,IntelliJ将用警告标记它。即便如此,Spring选择以合理的方式对待它也是有道理的。在阅读您的答案之前,我没有想到使用可选
并不意味着必需
会切换到错误
。相反,该值永远不会是false
。是的,正如我已经提到的Optional
的思想是使应用程序null
安全。如果这回答了你的问题,请接受它作为回答。如果你还有其他疑问,尽管问吧。来不及编辑我的评论了。我的意思是说这个值永远不会是null
。。