当前位置: 首页 > 知识库问答 >
问题:

Spring Hibernate验证@RequestBody

须峰
2023-03-14

使用Spring Boot1.4和Spring Data Rest/MVC,我无法使@valid@requestbody工作。我已经尝试了多个版本的Hibernate验证器,声明验证器bean等。

@BasePathAwareController
@RestController
public class TestRestController extends BaseController {
    @PostMapping("/pojo/save")
    public @ResponseBody ResponseEntity<?> upload(@Valid @RequestBody MyPojo pojo) {
     // Code here calling a repository.save. 
}

MyPojo包含各种验证注释,例如@digits、@notnull等。当调用repostiory.save方法但Spring没有尝试对POJO进行任何验证时,我实际上看到了验证器异常。

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-data-rest</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-data-jpa</artifactId>
            <exclusions>
                <exclusion>
                    <groupId>org.apache.tomcat</groupId>
                    <artifactId>tomcat-jdbc</artifactId>
                </exclusion>
            </exclusions>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-mail</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-thymeleaf</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-security</artifactId>
        </dependency>

更新

当试图将实体保存到数据库时,验证错误就会发生。我收到以下错误:

Caused by: javax.persistence.RollbackException: Error while committing the transaction
Caused by: javax.validation.ConstraintViolationException: Validation failed for classes
List of constraint violations:[
    ConstraintViolationImpl{interpolatedMessage='numeric value out of bounds (<9 digits>.<3 digits> expected)...

共有1个答案

谭玉泽
2023-03-14

结果是@BasePathawareController导致绑定验证无法运行。不确定这是预期的行为还是一个bug,但通过从我的控制器中删除该注释,验证将按预期运行。

 类似资料:
  • 我已经搜索并找到了很多关于这个问题的话题,但无论出于什么原因,解决方案都不能解决我的问题。 我运行的是Spring boot 1.5.8和Hibernate。 我创建了一个自定义验证注释,以检查电子邮件与数据库相比是否唯一。注释使用查询数据库,以检查数据库中是否已存在电子邮件。我一直得到一个异常,bean为空。 我的理论是使用了hibernate验证器,而不是< code > UniqueEmai

  • 接口说明 验证验证码 如需调用,请访问 开发者文档 来查看详细的接口使用说明 该接口仅开放给已获取SDK的开发者 如开启https功能,请求地址的协议应改为https,如:https://www.example.com/wish3dearth/api/access/v1.0.0/getLicenseInfo API地址 GET /authcenter/api/verify/v1.0.0/check

  • 在Spring Hibernate JTA项目中,我试图让异常处理工作。对于以下代码: 我试图捕捉底层hibernate/jdbc/db异常(例如,当依赖实体仍然存在时,删除将失败,并出现org . spring framework . ORM . hibernate 3 . hibernate JDBC exception)并执行一些操作。然而,catch代码永远不会到达。 但是如果我从我的方法

  • 我现在正在研究Spring和冬眠,我遇到了一个我找不到答案的谜题。这是关于配置Hibernate以便与Spring一起使用。以下是Spring文档中的Spring beans xml配置示例: 您可以在这里看到,txManager bean的sessionFactory依赖项(我假设的sessionFactory类型)由sessionFactory bean覆盖,它实际上是LocalSession

  • 我有一个应用程序,它使用spring 4 . 0 . 1 JPA hiba Nate 4 . 2 . 8(spring的JpaTransactionManager,localcontainereentitymanagerfactorybean,带有HibernateJpaDialect和apache的BasicDataSource作为数据源)进行数据库访问。在某个时刻,应用程序开始一个长时间运行的

  • 我需要应用一个双值验证,这需要与圆周率匹配。我正在考虑使用@pattern(regex=“3.14159265359”)。这是使用Hibernate验证约束应用这样一个约束的最佳方式吗?谢谢

  • 我现在把这两者搞混了。我知道Hibernate Validator6是Bean验证2.0规范的参考实现。它支持分组、错误消息国际化、自定义方法验证等。问题是Spring5支持这些特性还是我只剩下Hibernate Validator6了? 网上所有的参考例子都建议使用Hibernate验证器,没有什么关于Spring验证的发现,请建议或指向其他链接。

  • 我有以下场景:我正在尝试处理一个表单,模型属性是一个具有String和Long属性的bean。众所周知,bean验证提供了很多注释来帮助我们确定数据的有效性。我面临的是,对于Long属性的情况,我只能使用@NotNull和另一个注释(我不记得它的名字)来强制用户输入正数。如果用户输入例如“sdf”,应用程序会抛出一个BIG异常。所以我想知道的是,如果用户在爆炸前输入了一个数字(因为我不能使用@Pa