gpt4 book ai didi

java - Bean 验证仅适用于 Spring 中的 Controller 方法?

转载 作者:行者123 更新时间:2023-11-30 07:19:29 24 4
gpt4 key购买 nike

尝试使用下面的代码,似乎在Spring中,bean验证仅适用于 Controller 方法(那些用@RequestMapping注释的方法),普通方法不会触发bean验证。

@RequestMapping(value = "/test-validate", method = RequestMethod.POST)
public String test(@Validated Obj obj){
return "validation-works";
}

@RequestMapping(value = "/test-local-method-validate", method = RequestMethod.POST)
public String test2(@Validated Obj obj){
Obj obj = new Obj();
localValidate(obj);//won't validate, though content is null
}

void localValidate(@Validated Obj obj){
log.debug("entered");
}

//Model
public class Obj{
@NotNull
public String content = null;
}

如果我们调用第一个方法:/test-validate,就会触发验证,而对于第二个方法:/test-local-method-validate,我们调用本地普通方法:localValidate,则不会触发验证工作。

如果这是真的,我如何在普通方法中启用 Bean 验证?

最佳答案

答案是:它在您当前的代码中不起作用,因为在调用 localValidate(obj) 时,您完全跳过了 Spring 创建的代理,并且该代理负责验证部分。

选项:

  1. 您可以将此逻辑提取到另一个 protected 作用域的 Spring 组件中,将其注入(inject) Controller 并调用它,而不是调用 localValidate 方法,
  2. org.springframework.validation.Validator 注入(inject)您的 Controller 并手动调用

关于java - Bean 验证仅适用于 Spring 中的 Controller 方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37827371/

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