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

jgovgodb  于 2023-02-17  发布在  其他
关注(0)|答案(6)|浏览(104)

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

  • pojo注解级别
@NotNull(message="Carrier ID cannot be null")
    private String carrier;
  • 消息状态文档类
@Id
private String transactionId;

private String status;

private Key key;

private AccountDetail accountDetail;
  • 调用方法
saveMessage(@Valid @RequestBody MessageStatusDoc messageStatusDoc)

包含运营商字段的关键类
有谁能告诉我为什么我不能抓住这个错误吗?
PS当我试图记录它时,该值在控制台上打印为null。

kzipqqlq

kzipqqlq1#

你提供的代码看起来不错。虽然你没有提供你的控制器注解。

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

但是,请务必添加

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

到你的pom文件中(至少对于Sping Boot 〉= 2.3.0),这将包括验证API沿着做实际验证工作的hib验证器。
此外,如果注解在外部包中,请尽量不要混合

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

以及

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

希望这有帮助!

kqlmhetl

kqlmhetl2#

下面是一个例子。
我假设下面的类是您的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参数的carrier字段为空,则验证将抛出异常。
最后。我有个问题。你能给我所有的代码吗?

bqucvtff

bqucvtff3#

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

t0ybt7op

t0ybt7op4#

我在添加所有启动器文件后遇到了同样的问题。但是重新启动我的eclipse解决了这个问题。

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

nnt7mjpx5#

相反,在字段声明级别添加@NotEmpty注解对我很有效。

35g0bw71

35g0bw716#

重新启动Eclipse/STS解决了我的问题。

相关问题