Я хочу интегрировать библиотеку проверки vavr в свою команду dto таким образом, чтобы при десериализации команды dto из запроса типом возвращаемого значения статической фабрики было Try, но Джексон выдает следующую ошибку:
Type definition error: [simple type, class com.foo.command.FooCommand]; nested exception is com.fasterxml.jackson.databind.exc.InvalidDefinitionException: Cannot construct instance of
com.foo.command.FooCommand(no Creators, like default construct, exist): cannot deserialize from Object value (no delegate- or property-based Creator)
Вот FooCommand
@AllArgsConstructor(access = AccessLevel.PRIVATE)
public final class FooCommand {
private String foo;
private String bar;
@JsonCreator
public static Try<FooCommand> of(
@JsonProperty("foo") String foo,
@JsonProperty("bar") String bar
) {
return Try.of(() -> {
//Validate values
});
}
}
Я использую Spring 5, и он помечен для автоматической десериализации тела запроса в параметр контроллера. Возможно ли что-то подобное? Заранее спасибо.
Я исправил имя класса в примере на FooCommand. Спасибо, что указали на это.
Я думаю, вам стоит создать конструктор и поставить @JsonCreator поверх конструктора
Как тогда будет вызываться метод FooCommand :: of ()?
@SilvioMarijic I am using spring 5 and it's annotated to deserialize request body automatically Думаю, Spring это называет.
Похоже, что Джексон использует фабричные методы только в том случае, если они имеют один и тот же возвращаемый тип, даже если они получили аннотацию @JsonCreator.
Да, это странно, я понятия не имею, почему это ограничение на тип возвращаемого значения. Все работает нормально, когда я просто возвращаю экземпляр FooCommand, не помещая его в Try




Как выглядит FooCommand? Класс в вашем вопросе -
RegisterConfiguration, но возвращаемое значение -Try<FooCommand>.