4 回答

TA貢獻(xiàn)1815條經(jīng)驗(yàn) 獲得超10個(gè)贊
您的 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";
}
}
請(qǐng)參閱此Spring Boot 驗(yàn)證表單輸入示例以供參考。
為什么要使用@Valid注解?
這允許您驗(yàn)證應(yīng)用于類的數(shù)據(jù)成員的約束集。
但是,如果您的項(xiàng)目中有基于 XML 的配置,則必須將其添加到下面給出的applicationContext.xml中。(來(lái)源:這里)
<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貢獻(xiàn)2003條經(jīng)驗(yàn) 獲得超2個(gè)贊
您有一個(gè)帶有某些請(qǐng)求正文的端點(diǎn),例如;
@RestController
public class TheController {
@PostMapping(path = "/doSomething", consumes = "application/json", produces = "application/json")
public void post(@Valid @RequestBody AbstractDTO request) {
//code
}
}
您需要@Valid為請(qǐng)求對(duì)象添加注釋。只有這樣,您才能為端點(diǎn)啟用AbstractDTO驗(yàn)證/doSomething。
檢查這里,了解更深入的細(xì)節(jié)

TA貢獻(xiàn)2011條經(jīng)驗(yàn) 獲得超2個(gè)贊
你有正確的進(jìn)口嗎?
我用import javax.validation.constraints.NotNull;

TA貢獻(xiàn)1825條經(jīng)驗(yàn) 獲得超4個(gè)贊
描述
就我而言,我定義 1 個(gè)父類 A 有 3 個(gè)子類 B、C、D,例如:
公共 A { 私有 B bCommand; 私有 C cCommand;私有D dCommand;}
我為3個(gè)子類中的一些字段注釋了@NotNull、@NotBlank。在控制器中,我為這樣的函數(shù)添加了@Valid:
@PostMapping() public ResponseEntity create(@RequestBody @Valid A
command){ }
解決方案
我為具有需要檢查約束的字段的子類添加了@Valid。
示例:B、C 類有一些字段具有非空等約束
公共 A { @Valid private B bCommand; @Valid private C cCommand; 私有D dCommand;}
添加回答
舉報(bào)