Java 如何覆盖RequestParam的默认行为?

Java 如何覆盖RequestParam的默认行为?,java,spring-boot,spring-mvc,Java,Spring Boot,Spring Mvc,我有一个Rest API,我不想强制客户端发送请求参数。我有近400个API方法,我不想将所有参数设置为“required=false” 我想覆盖Spring RequestParam的默认行为。我想将RequestParam接口的“required”属性的默认值设置为“false” 有什么方法可以推翻它吗?如果我不能或这不是一个最佳做法,有没有办法解决上述问题。如上所述-您不能更改默认值 解决问题的一些可能方法: 将参数标记为可选: (任何带有“Nullable”名称部分的注释,即java

我有一个Rest API,我不想强制客户端发送请求参数。我有近400个API方法,我不想将所有参数设置为“required=false”

我想覆盖Spring RequestParam的默认行为。我想将RequestParam接口的“required”属性的默认值设置为“false”


有什么方法可以推翻它吗?如果我不能或这不是一个最佳做法,有没有办法解决上述问题。

如上所述-您不能更改默认值

解决问题的一些可能方法:

  • 将参数标记为可选:
(任何带有“Nullable”名称部分的注释,即javax.annotation.Nullable)

  • 根本不使用RequestParam注释-而是使用Pojo类进行参数绑定:
  • 编写(并注册)您自己的注释,并使用它而不是RequestParam(不可能为RequestParam注释创建别名)
  • 在运行时更改注释值(疯狂,无法用于方法注释),如下所示:

您可以为所有
@RequestParam
设置默认值。您不能更改默认值,除非您构建自己的Spring版本,将此设置为
false
,或者扩展/替换处理
@RequestParam
HttpMethodArgumentHandler
。另外,将其设置为
false
可能不是您想要的解决方案,这些请求参数的存在是有原因的。。。
@RequestMapping(...)
public String url(@RequestParam("key") Optional<String> keyValue```){
}
@RequestMapping(...)
public String url(@RequestParam("key") @Nullable String keyValue){
}
@RequestMapping(...)
public String url(PojoRequestParameters parameters) {
}

//...

public class PojoRequestParameters {
        private String key;

        public String getKey() {
            return key;
        }

        public void setKey(String key) {
            this.key = key;
        }
    }