我正在尝试在基于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);
}
我知道设置中有什么问题还是需要更多信息吗?
寻求帮助
答案 0 :(得分:0)
您的压缩器应该用@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;
}
....
}