对于其余请求,验证在 Spring Boot 中不起作用

Posted

技术标签:

【中文标题】对于其余请求,验证在 Spring Boot 中不起作用【英文标题】:Validation is not working in Spring boot for the rest requests 【发布时间】:2019-02-12 12:01:53 【问题描述】:

您好,我一直在尝试通过“JSR-303”验证其余请求的数据 代码如下-:

*pojo 注释级别

@NotNull(message="Carrier ID cannot be null")
    private String carrier;

*MessageStatusDoc 类

@Id
private String transactionId;

private String status;

private Key key;

private AccountDetail accountDetail;

*调用方法

saveMessage(@Valid @RequestBody MessageStatusDoc messageStatusDoc)

关键类包含运营商字段

任何人都可以建议为什么我无法捕捉到错误..?

PS 当我尝试记录它时,该值在控制台上打印为 null ..

【问题讨论】:

你把Spring的@Validated注解放到你的Controller上了吗? 是的,我做了,但它仍然无法正常工作 【参考方案1】:

您提供的代码看起来不错。尽管您没有提供控制器注释。例如

@PostMapping
public void saveMessage(@Valid @RequestBody MessageStatusDoc messageStatusDoc)

不过一定要加

    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-validation</artifactId>
    </dependency>

到您的 pom 文件(至少对于 Spring Boot >= 2.3.0)。 这将包括验证 API 以及执行实际验证工作的休眠验证器。

此外,如果在外部包中有注释,请尽量不要混合

    <dependency>
        <groupId>jakarta.validation</groupId>
        <artifactId>jakarta.validation-api</artifactId>
    </dependency>

    <dependency>
        <groupId>javax.validation</groupId>
        <artifactId>validation-api</artifactId>
    </dependency>

希望这会有所帮助!

【讨论】:

谢谢小伙子,没有在项目中声明验证,为我节省了一吨!【参考方案2】:

如果您在 getter 级别而不是在字段声明级别使用注释,这将得到解决。

【讨论】:

【参考方案3】:

这是一个例子。

我假设下面的类是你的 MessageStatusDoc。

运营商字段是您需要验证的。

public class MessageStatusDoc 

        @Id
        private String transactionId;

        private String status;

        private Key key;

        @NotNull(message="Carrier ID cannot be null")
        private String carrier;

        //getter setter

这里是使用 MessageStatusDoc 作为参数的方法

public void saveMessage(@Valid @RequestBody MessageStatusDoc messageStatusDoc) 
   //nothing to do for now

如果你按照给定的例子做得很好,那么如果任何方法调用了 saveMessage 方法但 messageStatusDoc 参数的载体字段为空,那么验证将抛出异常。

然后结束。我有个问题。 可以给个全部代码吗?

【讨论】:

以上是关于对于其余请求,验证在 Spring Boot 中不起作用的主要内容,如果未能解决你的问题,请参考以下文章

如何在请求正文 Spring Boot Rest Controller 中指定订单验证

基本身份验证在Spring-Boot WS Soap服务中不起作用

在 Spring Boot 中使用 JWT 进行简单的身份验证

服务器端验证似乎在 Spring Boot 2.3.1.RELEASE 中不起作用

身份验证在spring boot 1.5.2和Oauth2中不起作用

如何为 Spring Boot RESTful Web 服务配置多级身份验证?