【问题标题】:micronaut reactive-mongo setup Internal Server Errormicronaut 反应式 mongo 设置内部服务器错误
【发布时间】:2019-06-27 20:56:51
【问题描述】:

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

“内部服务器错误:使用 AutomaticPojoCodec。\n解码为“成员”失败,原因是 以下异常:\n\n找不到公共构造函数 'Member'。\n\n自定义 Codec 或 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);
    }

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

感谢帮助

【问题讨论】:

    标签: java mongodb micronaut


    【解决方案1】:

    你的 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;
        }
    
       ....
    
    }
    

    【讨论】:

    • 谢谢我得到了答案:我需要将@JsonCreator@BsonCreator 放到构造函数和每个参数中。
    猜你喜欢
    • 1970-01-01
    • 2021-06-03
    • 2012-10-11
    • 2014-07-10
    • 1970-01-01
    • 2013-07-24
    • 1970-01-01
    • 2019-02-06
    • 2015-03-14
    相关资源
    最近更新 更多