当前位置: 首页 > 知识库问答 >
问题:

如何配置Spring MVC来验证控制器方法参数的构造函数参数

曹伟泽
2023-03-14

我正在用Kotlin写一个项目,并把它放在一个控制器中:

@PostMapping("/token")
fun generateToken(@RequestBody @Valid credentials: Credentials) { /* something */ }

data class Credentials(@Email @NotBlank val email: String,
                       @NotBlank val password: String)

默认情况下,< code>@Valid注释告诉Spring验证对象字段。但是Kotlin将约束注释放在构造函数参数上,所以验证不起作用。为了让它工作,我必须为注释定义使用站点目标:

data class Credentials(@field:Email @field:NotBlank val email: String,
                       @field:NotBlank val password: String)

这很烦人并且增加了视觉垃圾。有可能配置Spring来验证构造函数参数吗?

共有1个答案

滕翔飞
2023-03-14

你能做的事情不多。您可以通过组合每个字段的注释使其看起来更好,例如:

data class Credentials(@field:[Email NotBlank] val email: String,
                   @field:NotBlank val password: String)

除此之外,您唯一的其他选择是:

>

  • 手动配置的Spring验证类

    验证代码体中的数据

  •  类似资料:
    • 问题内容: 通常,类构造函数应接受的最大参数数量是多少?我正在开发一个需要大量初始化数据(当前有10个参数)的类。但是,带有10个参数的构造函数感觉不正确。这使我相信我应该为每个数据创建一个getter / setter。不幸的是,getter / setter模式不会强迫用户输入数据,没有它,对象的表征就不完整,因此毫无用处。有什么想法吗? 问题答案: 有那么多参数,该考虑构建器模式了。创建一个

    • 我有过 我通过这种方式传递profileJson: 但是我的配置文件Json对象具有所有空字段。我应该怎么做才能让Spring解析我的json?

    • Kotlin中的参数与Java中有些不同。如你所见,我们先写参数的名字再写它的类型: fun add(x: Int, y: Int) : Int { return x + y } 我们可以给参数指定一个默认值使得它们变得可选,这是非常有帮助的。这里有一个例子,在Activity中创建了一个函数用来toast一段信息: fun toast(message: String, length: I

    • 我们正在构建一个与远程API通信的webapp。我想这样设计这个远程API的客户端: 关键是,我想在构建期间将凭据传递给这个客户端,并让所有其他方法使用这些凭据。我的第二个要求是我希望这个实例在会话中。 我在这里发现了如何传递动态构造函数参数。 我在这里发现了如何创建会话属性。 但我想不出一种方法来结合这两种技术。据我所知,您必须在自己的类getter方法中实例化会话属性。这种类似getter的方

    • 问题内容: 如何使用Hibernate验证程序来验证构造函数或方法中的参数?我希望在ValueObject创建之前进行验证,因此除非所有参数都有效,否则我可以引发异常而不创建对象。 基本上,我正在尝试使用注释,而不是尽可能执行以下操作: 我试过遵循这样的文档,虽然看起来似乎有效,但仍然会导致创建对象。 将注释添加到构造函数参数似乎无效 我如何创建对象: 验证器: 问题答案: 对于找到此帖子的其他任