gpt4 book ai didi

java - Spring MVC 3.0 : How to validate path variable that is global to all request mappings efficiently?

转载 作者:塔克拉玛干 更新时间:2023-11-03 04:31:12 26 4
gpt4 key购买 nike

我正在尝试使用 Spring MVC 3.0,虽然我可以让它工作,但我似乎无法有效地处理这种特殊情况。

我有一个带有“/{studyName}/module”前缀的 Controller ,它看起来像这样:-

@Controller
@RequestMapping(value = "/{studyName}/module")
public class ModuleController {

@RequestMapping(...)
public ModelAndView getA(@PathVariable String studyName, ...) {
if (!validStudy(studyName)) { return bad request; }
...
}

@RequestMapping(...)
public ModelAndView getB(@PathVariable String studyName, ...) {
if (!validStudy(studyName)) { return bad request; }
...
}

@RequestMapping(...)
public ModelAndView getC(@PathVariable String studyName, ...) {
if (!validStudy(studyName)) { return bad request; }
...
}

@RequestMapping(...)
public ModelAndView getD(@PathVariable String studyName, ...) {
if (!validStudy(studyName)) { return bad request; }
...
}
}

此代码的问题是,我将 studyName 验证分散在所有方法中,也可能在其他 Controller 的方法中。有没有一种方法可以在不使用 AOP 之类的情况下一次性对 studyName 路径变量执行验证?您如何处理这样的验证?

谢谢。

最佳答案

目前,要让这一切自动发生有点棘手,但这是可能的。您应该使用实现附录 C 的 Bean 验证 (JSR-303) 提供程序。目前是 Apache BeanValidation 或 Hibernate Validator 4.2(处于测试阶段)。

将您选择的 bean 验证实现添加到类路径中。这将是 Spring MVC 使用的 JSR-303 的实现。

其次,使用@Valid 和任何约束注释(如@NonNull)注释方法参数。

这看起来像:

public ModelAndView getB(@Valid @NonNull @PathVariable String studyName, ...) {

那应该行得通。然后您需要检查您的 Spring 错误是否有任何问题。

或者,如果您不使用任何其他 Spring 参数,您可以像这样使用 InitBinder 注册一个 validator :

@InitBinder
public void initBinder(WebDataBinder binder) {
binder.setValidator(new StudyNameValidator());
}

关于java - Spring MVC 3.0 : How to validate path variable that is global to all request mappings efficiently?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4691992/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com