4 回答
TA贡献1815条经验 获得超10个赞
您的 DTO 类是正确的。你必须使用@Valid注释。
例如 :
@Controller
public class Controller {
@PostMapping("/")
public String checkPersonInfo(@Valid AbstractDTO abstractDTO, BindingResult bindingResult) {
if (bindingResult.hasErrors()) {
return "some-page";
}
return "some-other-page";
}
}
请参阅此Spring Boot 验证表单输入示例以供参考。
为什么要使用@Valid注解?
这允许您验证应用于类的数据成员的约束集。
但是,如果您的项目中有基于 XML 的配置,则必须将其添加到下面给出的applicationContext.xml中。(来源:这里)
<bean
class="org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter">
<property name="webBindingInitializer">
<bean
class="org.springframework.web.bind.support.ConfigurableWebBindingInitializer">
<property name="validator" ref="validator" />
</bean>
</property>
</bean>
<bean id="validator"
class="org.springframework.validation.beanvalidation.LocalValidatorFactoryBean">
</bean>
TA贡献2003条经验 获得超2个赞
您有一个带有某些请求正文的端点,例如;
@RestController
public class TheController {
@PostMapping(path = "/doSomething", consumes = "application/json", produces = "application/json")
public void post(@Valid @RequestBody AbstractDTO request) {
//code
}
}
您需要@Valid为请求对象添加注释。只有这样,您才能为端点启用AbstractDTO验证/doSomething。
检查这里,了解更深入的细节
TA贡献1825条经验 获得超4个赞
描述
就我而言,我定义 1 个父类 A 有 3 个子类 B、C、D,例如:
公共 A { 私有 B bCommand; 私有 C cCommand;私有D dCommand;}
我为3个子类中的一些字段注释了@NotNull、@NotBlank。在控制器中,我为这样的函数添加了@Valid:
@PostMapping() public ResponseEntity create(@RequestBody @Valid A
command){ }
解决方案
我为具有需要检查约束的字段的子类添加了@Valid。
示例:B、C 类有一些字段具有非空等约束
公共 A { @Valid private B bCommand; @Valid private C cCommand; 私有D dCommand;}
添加回答
举报