作者热门文章
- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
我正在尝试使用 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/
我是一名优秀的程序员,十分优秀!