【问题标题】:Validation is not working in Spring boot for the rest requests对于其余请求,验证在 Spring Boot 中不起作用
【发布时间】: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上了吗?
  • 是的,我做了,但它仍然无法正常工作

标签: java json rest spring-boot


【解决方案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 参数的载体字段为空,那么验证将抛出异常。

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2020-11-15
      • 2018-12-05
      • 2017-08-10
      • 2020-11-22
      • 2020-11-05
      • 2021-05-08
      • 2019-10-23
      相关资源
      最近更新 更多