首页 > 解决方案 > micronaut 反应式 mongo 设置内部服务器错误

问题描述

我正在尝试在基于 java 的 micronaut 项目中设置 mongo 反应式客户端,但出现以下错误:

“内部服务器错误:使用 AutomaticPojoCodec 解码时发生异常。\n解码为“成员”失败,出现以下异常:\n\n找不到“成员”的公共构造函数。\n\n可能需要自定义编解码器或 PojoCodec明确配置和注册来处理这种类型。”

我的项目设置如下:

├── Application.java
├── config
│   └── MongoConfiguration.java
├── controller
│   └── MemberController.java
├── model
│   └── Member.java
└── service
    └── MemberService.java

该应用程序正在启动,但如果我调用 http 端点来列出所有成员,它会抛出一个错误,如帖子中所列。

我的会员一开始看起来很简单:

import com.fasterxml.jackson.annotation.JsonProperty;

public class Member {
    private final String firstname;
    private final String lastname;

    public Member( @JsonProperty("firstname") String firstname, @JsonProperty("lastname") String lastname) {
        this.firstname = firstname;
        this.lastname = lastname;
    }

   ....

}

// And my service, has this method where I'm calling mongo
    private MongoCollection<Member> getCollection() {
        configuration.setCollectionName("members");
        return mongoClient.getDatabase(configuration.getDatabaseName())
                .getCollection(configuration.getCollectionName(), Member.class);
    }

我知道设置中有什么问题还是需要更多信息?

谢谢帮助

标签: javamongodbmicronaut

解决方案


您的 constrictor 应该使用@JsonCreator注释,因为Member没有默认构造函数并且具有带注释的参数的自定义构造函数@JsonProperty

构造函数/工厂方法,其中每个参数都使用 JsonProperty 或 JacksonInject 进行注释,以指示要绑定到的属性名称

public class Member {
    private final String firstname;
    private final String lastname;

    @JsonCreator
    public Member(@JsonProperty("firstname") String firstname, 
                  @JsonProperty("lastname") String lastname) {
        this.firstname = firstname;
        this.lastname = lastname;
    }

   ....

}

推荐阅读