Как преодолеть конфликтующие определения сеттера для свойства?

Я использую библиотеки com.fasterxml.jackson и io.swagger. В моей конечной точке REST я использую тип org.javamoney.moneta.Money для запроса GET. При развертывании войны я получаю следующее исключение 1;

Я следовал этому ссылке и написал следующий код[2]; и зарегистрировал его в @ApplicationPath. Но все еще получаю ту же проблему. Любое руководство было бы действительно полезно?

@ApplicationPath("/rest")
public class RestApplication extends Application {
@Override
    public Set<Class<?>> getClasses() {
        HashSet<Class<?>> set = new HashSet<Class<?>>();
        set.add(com.test.JsonMoneyProvider.class);

[2]

import javax.money.CurrencyUnit;
    import javax.money.Monetary;
    import javax.money.MonetaryAmountFactory;
    import javax.ws.rs.ext.Provider;
    import javax.xml.bind.annotation.XmlTransient;

    import com.fasterxml.jackson.annotation.JsonIgnore;
    import com.fasterxml.jackson.databind.ObjectMapper;
    import com.fasterxml.jackson.jaxrs.json.JacksonJsonProvider;

    @Provider
    public class JsonMoneyProvider extends JacksonJsonProvider {
        public JsonMoneyProvider() {
            ObjectMapper mapper = new ObjectMapper();
            mapper.addMixIn(MonetaryAmountFactory.class, MixIn.class);
            setMapper(mapper);
        }

        public static interface MixIn {
            @JsonIgnore
            @XmlTransient
            MonetaryAmountFactory setCurrency(CurrencyUnit currency);

            @JsonIgnore
            @XmlTransient
            default MonetaryAmountFactory setCurrency(String currencyCode) {
                return setCurrency(Monetary.getCurrency(currencyCode));
            }
        }
    }

1

Caused by: java.lang.IllegalArgumentException: Conflicting setter definitions for property "currency": javax.money.MonetaryAmountFactory#setCurrency(1 params) vs javax.money.MonetaryAmountFactory#setCurrency(1 params)
        at com.fasterxml.jackson.databind.introspect.POJOPropertyBuilder.getSetter(POJOPropertyBuilder.java:293)
        at io.swagger.jackson.ModelResolver.resolve(ModelResolver.java:246)
        at io.swagger.jackson.ModelResolver.resolve(ModelResolver.java:127)
        at io.swagger.converter.ModelConverterContextImpl.resolve(ModelConverterContextImpl.java:99)
        at io.swagger.jackson.ModelResolver.resolveProperty(ModelResolver.java:106)
        a

person Ratha    schedule 26.05.2016    source источник
comment
Не знаю, откуда берется исключение, но я думаю, что нет смысла в setCurrency(String currencyCode) реализации Только имя и подпись метода (и поля) используются для сопоставления аннотаций MixIn: определения доступа (частный, защищенный, ...) и реализации методов игнорируются wiki.fasterxml.com/JacksonMixInAnnotations   -  person varren    schedule 26.05.2016
comment
@varren Я сделал, как указано в документации Джексона, но все еще получаю ту же проблему. общедоступный статический интерфейс MixIn { At.JsonIgnore MonetaryAmountFactory setCurrency (валюта CurrencyUnit); At.JsonIgnore MonetaryAmountFactory setCurrency (String currencyCode); }   -  person Ratha    schedule 27.05.2016


Ответы (1)


Просто используйте эту аннотацию в методе установки десериализации, чтобы указать Джексону, какой из них использовать: @com.fasterxml.jackson.annotation.JsonSetter

person Arturo Franco Barrio    schedule 17.03.2021