настройка micronaut response-mongo Внутренняя ошибка сервера - PullRequest
0 голосов
/ 27 июня 2019

Я пытаюсь настроить реактивный клиент mongo в проекте microronaut, основанном на java, и получаю следующую ошибку:

"Внутренняя ошибка сервера: возникла исключительная ситуация при декодировании с использованием AutomaticPojoCodec. \ NДекодирование в 'Member' завершилось неудачно с следующее исключение: \ n \ nНе удается найти открытый конструктор для 'Member'. \ 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);
    }

Есть идеи, что не так в настройке или нужно больше информации?

спасибо за помощь

1 Ответ

0 голосов
/ 28 июня 2019

Ваш констриктор должен быть аннотирован @ 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;
    }

   ....

}
...