为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

精慕HU 2023-02-16 16:23:40
这是我的场景class B {   @NotNull    String x;}class A {    @Valid    B b;    @NotNull    String y;} 现在我的 Http POST 请求获得一个对象class A作为有效负载。String y应该在传入的 HTTP 请求中进行验证(并且在持久化到数据库之前也进行验证)。但是,String x不应在传入的 HTTP 请求中验证(并且仅在持久保存到 DB 之前验证),因为String x在请求中将为 null,并且其值将在完整class A对象持久保存之前由业务逻辑设置。有什么办法可以做到这一点?
查看完整描述

3 回答

?
温温酱

TA贡献1752条经验 获得超4个赞

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


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 {

}

如果你的控制器没有定义这个组,它下面的任何注释都将被忽略,因此你的要求将得到满足,请求中的验证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

    }

}

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


查看完整回答
反对 回复 2023-02-16
?
HUH函数

TA贡献1836条经验 获得超4个赞

我认为您缺少在将在控制器层中验证的参数上添加 @Vaild 注释。


@RestController

public class AController {


    @PostMapping("/a")

    ResponseEntity<String> addA(@Valid @RequestBody A a) {

        // persisting the a entity 

        return ResponseEntity.ok("A is valid");

    }

}


查看完整回答
反对 回复 2023-02-16
?
qq_遁去的一_1

TA贡献1725条经验 获得超8个赞

实际上,如果“@Valid”注释没有作为参数前缀,它不会影响,@Jonathan 解释道。


要在持久化之前启用验证,它的工作方式如下:


@Repository

@Validated

public MyDao {

    public void insertA(@Valid A a){

        //logic here

    }


}

@Validated(org.springframework.validation.annotation.Validated) 是启用参数验证的关键。这个对我有用。


查看完整回答
反对 回复 2023-02-16
  • 3 回答
  • 0 关注
  • 130 浏览

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号