我正在开发spring-boot应用程序,我需要在检查其他信息之前验证用户信息。这是一个片段:
ALTER TABLE Marriage ADD CONSTRAINT CK_OlderThan
CHECK (fn_OlderThanSon(Person_id,Relative_id) = 'True');
当用户来自其他路线 / create-sp-user 时,我必须重新验证用户:
java.sql.SQLSyntaxErrorException: ORA-01735: invalid ALTER TABLE option
at oracle.jdbc.driver.T4CTTIoer.processError(T4CTTIoer.java:450)
at oracle.jdbc.driver.T4CTTIoer.processError(T4CTTIoer.java:399)
at oracle.jdbc.driver.T4C8Oall.processError(T4C8Oall.java:1059)
at oracle.jdbc.driver.T4CTTIfun.receive(T4CTTIfun.java:522)
at oracle.jdbc.driver.T4CTTIfun.doRPC(T4CTTIfun.java:257)
at oracle.jdbc.driver.T4C8Oall.doOALL(T4C8Oall.java:587)
at oracle.jdbc.driver.T4CStatement.doOall8(T4CStatement.java:210)
at oracle.jdbc.driver.T4CStatement.doOall8(T4CStatement.java:30)
at oracle.jdbc.driver.T4CStatement.executeForRows(T4CStatement.java:931)
at oracle.jdbc.driver.OracleStatement.doExecuteWithTimeout(OracleStatement.java:1150)
at oracle.jdbc.driver.OracleStatement.executeQuery(OracleStatement.java:1309)
at oracle.jdbc.driver.OracleStatementWrapper.executeQuery(OracleStatementWrapper.java:422)
at com.company.Main.main(Main.java:93)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:498)
at com.intellij.rt.execution.application.AppMain.main(AppMain.java:147)
你有什么想法吗?
祝你好运
答案 0 :(得分:0)
就像Dominik所说,@ Valid注释在控制器中执行任何代码之前验证对象
如果要验证方法内的对象,则应使用自定义验证器。
实施org.springframework.validation.Validator
并在控制器内调用validate
方法。
@RequestMapping(value = "/create-sp-user", method = RequestMethod.POST)
public String ceateCustomer(@Valid @RequestBody User user, BindingResult result){
user.setSp(true);
CustomValidator customValidator = new CustomValidator();
customValidator.validate(user, result);
if (result.hasErrors()){
//do something
} else {
myService.create(user);
}
}