本文介绍了使用 Micronaut 验证 POJO 记录不起作用的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

对记录类使用 Micronaut bean 验证不起作用

Using Micronaut bean validation for the record class is not working

compile 'io.micronaut:micronaut-validation:2.2.1'

记录类

@Introspected
public record ProductViewModel
        (
                @JsonProperty("id")
                String id,

                @JsonProperty("name")
                @NotBlank
                @NotNull
                String name,

                @JsonProperty("description")
                @NotBlank
                String description,

                @JsonProperty("price")
                @NotBlank
                float price
        ) {
}

卷曲

curl --location --request POST 'http://localhost:8084/api/v1/product' \
--header 'Content-Type: application/json' \
--data-raw '{
  "price": 1000,

  "description": "This is the description"
}'

控制器方法

@Controller("/product")
@Validated
public class ProductController {

 private final IProductManager iProductManager;

    public ProductController(IProductManager iProductManager) {
        this.iProductManager = iProductManager;
    }
 @Post
 public Single<HttpResponse<?>> Create(@Body @Valid ProductViewModel model) {
        LOG.info(String.format("Controller --> Creating new product"));
        return iProductManager.Create(model).map(item -> HttpResponse.created(item));
    }
}

错误为

{
    "message": "model: Cannot validate view.model.product.ProductViewModel. No bean introspection present. Please add @Introspected to the class and ensure Micronaut annotation processing is enabled",
    "_links": {
        "self": {
            "href": "/api/v1/product",
            "templated": false
        }
    }
}

注释过程已启用.

Build.Gradle

Build.Gradle

plugins {
    id 'java'
}

group 'fete.bird'
version '1.0-SNAPSHOT'

repositories {
    mavenCentral()
}

dependencies {
    implementation("io.swagger.core.v3:swagger-annotations:2.1.5")
    implementation("javax.annotation:javax.annotation-api:1.3.2")
    testCompile group: 'junit', name: 'junit', version: '4.12'
    implementation 'org.mongodb:bson:4.2.0-beta1'
    implementation 'io.micronaut:core:1.0.0.RC2'
    implementation 'io.micronaut:micronaut-core:2.2.1'
    implementation 'com.fasterxml.jackson.core:jackson-annotations:2.12.0'
    compile 'io.micronaut:micronaut-validation:2.2.1'
}
tasks.withType(JavaCompile).all {
    options.compilerArgs += ['--enable-preview']
}

tasks.withType(JavaExec) {
    jvmArgs += '--enable-preview'
}

推荐答案

如果是单独的模块/项目添加下面的依赖

If it is a separate module/project add the below dependency

compile "io.micronaut:micronaut-inject:2.2.2"
    annotationProcessor "io.micronaut:micronaut-inject-java:2.2.2"
    annotationProcessor "io.micronaut:micronaut-validation:2.2.2"

如果POJO在同一个项目,更新到最新版本的micronaut,这里解决https://github.com/micronaut-projects/micronaut-core/issues/4712#event-4105835836

If the POJO are in the same project, update to the latest version of micronaut it is resolved here https://github.com/micronaut-projects/micronaut-core/issues/4712#event-4105835836

这篇关于使用 Micronaut 验证 POJO 记录不起作用的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!

06-20 01:02