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

Ris*_*sal 3 java rest json spring-boot

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

*pojo 注释级别

@NotNull(message="Carrier ID cannot be null")
    private String carrier;
Run Code Online (Sandbox Code Playgroud)

*MessageStatusDoc 类

@Id
private String transactionId;

private String status;

private Key key;

private AccountDetail accountDetail;
Run Code Online (Sandbox Code Playgroud)

*调用方法

saveMessage(@Valid @RequestBody MessageStatusDoc messageStatusDoc)
Run Code Online (Sandbox Code Playgroud)

关键类包含载体字段

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

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

Geo*_*ser 7

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

@PostMapping
public void saveMessage(@Valid @RequestBody MessageStatusDoc messageStatusDoc)
Run Code Online (Sandbox Code Playgroud)

不过一定要加

    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-validation</artifactId>
    </dependency>
Run Code Online (Sandbox Code Playgroud)

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

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

    <dependency>
        <groupId>jakarta.validation</groupId>
        <artifactId>jakarta.validation-api</artifactId>
    </dependency>
Run Code Online (Sandbox Code Playgroud)

    <dependency>
        <groupId>javax.validation</groupId>
        <artifactId>validation-api</artifactId>
    </dependency>
Run Code Online (Sandbox Code Playgroud)

希望这可以帮助!


Him*_*mly 0

这是一个例子。

我假设下面的课程是您的 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
}
Run Code Online (Sandbox Code Playgroud)

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

public void saveMessage(@Valid @RequestBody MessageStatusDoc messageStatusDoc) {
   //nothing to do for now
}
Run Code Online (Sandbox Code Playgroud)

如果您像给定的示例一样做得很好,那么如果任何方法调用 saveMessage 方法,但 messageStatusDoc 参数的载体字段为 null,则验证将引发异常。

还有结束。我有个问题。可以给一下全部代码吗?