3 回答

TA貢獻(xiàn)1752條經(jīng)驗(yàn) 獲得超4個(gè)贊
如果可以編輯這些對(duì)象,則可以使用驗(yàn)證組;
class B {
@NotNull(groups = Ignored.class)
String x;
}
class A {
@Valid
B b;
@NotNull
String y;
}
在哪里Ignored;
import javax.validation.groups.Default;
public interface Ignored extends Default {
}
如果你的控制器沒(méi)有定義這個(gè)組,它下面的任何注釋都將被忽略,因此你的要求將得到滿足,請(qǐng)求中的驗(yàn)證B.x將被忽略,但其他字段A將被驗(yàn)證。但我不是 100% 確定驗(yàn)證將在數(shù)據(jù)庫(kù)端應(yīng)用,你可以試試嗎?
否則你可以嘗試做;
@RestController
public class Controller {
@PostMapping("/etc")
ResponseEntity<String> addA(@RequestBody A a) { //disabled validation here
B tempB = a.getB();
a.setB(null);
validateA(a);
a.setB(tempB);
// continue logic
}
}
在哪里validateA();
import org.springframework.validation.annotation.Validated;
@Validated
public class Validator {
public void validateA(@Valid A a) {
// nothing here
}
}
這是一個(gè)丑陋的解決方案,但仍然是一個(gè)解決方案......

TA貢獻(xiàn)1836條經(jīng)驗(yàn) 獲得超4個(gè)贊
我認(rèn)為您缺少在將在控制器層中驗(yàn)證的參數(shù)上添加 @Vaild 注釋。
@RestController
public class AController {
@PostMapping("/a")
ResponseEntity<String> addA(@Valid @RequestBody A a) {
// persisting the a entity
return ResponseEntity.ok("A is valid");
}
}

TA貢獻(xiàn)1725條經(jīng)驗(yàn) 獲得超8個(gè)贊
實(shí)際上,如果“@Valid”注釋沒(méi)有作為參數(shù)前綴,它不會(huì)影響,@Jonathan 解釋道。
要在持久化之前啟用驗(yàn)證,它的工作方式如下:
@Repository
@Validated
public MyDao {
public void insertA(@Valid A a){
//logic here
}
}
@Validated(org.springframework.validation.annotation.Validated) 是啟用參數(shù)驗(yàn)證的關(guān)鍵。這個(gè)對(duì)我有用。
添加回答
舉報(bào)