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

Javax验证不会携带到不可变的生成类

慕容昊焜
2023-03-14

我使用的是不可变的。org库,并希望添加Javax注释验证。但是我注意到验证没有被带到生成的类中。我认为这是不变的。org与验证注释兼容。我有spring boot starter验证和javax。验证依赖项。

不可变的

@Value.Immutable
public interface Entity {
    @Valid @Size(min = 19)
    int age();

    @Valid @NotBlank
    String name();
}

控制器:

    @PostMapping("/entity/")
    public ResponseEntity post2(@RequestBody @Valid ImmutableEntity entity) {


        return  new ResponseEntity<Object>("", HttpStatus.OK);
    }

pom。xml

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>
    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>2.5.5</version>
        <relativePath/> <!-- lookup parent from repository -->
    </parent>
    <groupId>com.example</groupId>
    <artifactId>testImmutable</artifactId>
    <version>0.0.1-SNAPSHOT</version>
    <name>testImmutable</name>
    <description>Demo project for Spring Boot</description>
    <properties>
        <java.version>1.8</java.version>
    </properties>
    <dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-validation</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
        </dependency>
        <dependency>
            <groupId>org.immutables</groupId>
            <artifactId>value</artifactId>
            <version>2.8.8</version>
            <scope>provided</scope>
        </dependency>
        <dependency>
            <groupId>javax.validation</groupId>
            <artifactId>validation-api</artifactId>
            <version>2.0.1.Final</version>
        </dependency>
        <!-- https://mvnrepository.com/artifact/com.fasterxml.jackson.core/jackson-databind -->
        <dependency>
            <groupId>com.fasterxml.jackson.core</groupId>
            <artifactId>jackson-databind</artifactId>
            <version>2.12.5</version>
        </dependency>
    </dependencies>

    <build>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
            </plugin>
        </plugins>
    </build>

</project>

共有1个答案

孙阳旭
2023-03-14
  1. 实际上,不应在模型中为字段或类设置有效的,只应为控制器方法的参数设置有效的
  2. @Size不适用于int字段,您需要使用@Range@Min
  3. 在界面中,您注释了抽象方法,而不是字段。验证器如何将验证字段<代码>年龄<代码>和<代码>名称<代码>与方法<代码>年龄()<代码>和<代码>名称()<代码>?当调用它们(它们的实现)时,验证器将尝试验证它们。但不是模型的字段
 类似资料:
  • 我试图使用swagger来记录我的Restapi,并且取得了一些成功,但是在受限资源参数方面,我遇到了一堵墙。我正在使用JBoss RESTEasy与Hibernate验证器提供程序和Jackson 2.x注释的POJO。我遇到的问题是,当遇到@DecimalMin/@DecimalMax注释时,我得到一个 似乎swagger正在尝试使用较新版本的javax.validation.constrai

  • 我使用javax.validation和Hibernate验证器实现了一些代码。使用验证的单元测试工作良好。该构建生成OSGi包和特性,并在Karaf中运行。 “无法创建配置,因为找不到Bean验证提供程序。请将Hibernate Validator(RI)这样的提供程序添加到类路径中。” 我会包括stacktrace,但它对我来说没有什么用。大部分都在我的代码、junit和Paxexam中。 我

  • 我的springboot版本是2.3.7。我知道spring boot starter验证不是spring boot starter web的可传递依赖项。但即使单独添加了它,我的注释也不起作用。 //下面的依赖我已经添加build.gradle编译'org.springframework.boot: spring-boot-starter-validation' //我希望在请求时出错的示例类

  • 假设我有一个非常简单的模型,我想验证它的标题是否为空白。 在服务层上,我执行如下验证(使用Hibernate验证器): 我的资源是: null 编辑 我忘了提到,将方法范围从private更改为public可以使验证工作。

  • 我正在用Java对一个二进制文件进行签名。我能够在Java代码中签名和验证,但是在openssl中使用生成的签名时,它无法验证到相同的二进制文件。步骤是:加载数据- 这应该相当于在openssl: openssl dgst-sha256-符号private.key-二进制target.bin 我验证了sha256与openssl生成的匹配。

  • 我有一个xml,我已经生成了xsd文件。 XML文件 XSD文件 但是当我在eclipse中生成JAXB类时。 NetCharge 类是使用变量字符串“货币”创建的,但没有值变量。 所有其他使用值和属性的类都会发生这种情况。 请帮帮忙。