gpt4 book ai didi

java - 如何在持久化之前启用 Spring Bean 验证但忽略 HTTP 请求

转载 作者:行者123 更新时间:2023-11-30 07:40:58 25 4
gpt4 key购买 nike

这是我的场景

class B {
@NotNull
String x;
}

class A {
@Valid
B b;

@NotNull
String y;
}

现在我的 Http POST 请求得到一个 class A 的对象作为负载。 String y 应该在传入的 HTTP 请求中进行验证(并且在持久化到 DB 之前也进行验证)。但是 String x 不应在传入的 HTTP 请求中进行验证(并且仅在持久保存到 DB 之前进行验证)因为 String x 在请求中将为 null 并且其值将被设置在完整的 class A 对象被持久化之前由业务逻辑。

有什么办法可以做到这一点吗?

最佳答案

如果您可以编辑这些对象,则可以使用验证组;

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 {
}

如果你的 Controller 没有定义这个组,它下面的任何注释都将被忽略,因此你的要求将得到满足,验证 B.x将在请求中被忽略,但 A 的其他字段将被验证。但我不是 100% 确定验证将在数据库端应用,你可以试试吗?

否则你可以尝试做;

@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
}
}

这是一个丑陋的解决方案,但仍然是一个解决方案......

关于java - 如何在持久化之前启用 Spring Bean 验证但忽略 HTTP 请求,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56728073/

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