【问题标题】:How to overcome "Conflicting setter definitions for property "?如何克服“属性的设置器定义冲突”?
【发布时间】:2016-05-26 05:57:59
【问题描述】:

我使用com.fasterxml.jacksonio.swagger 库。在我的 REST 端点中,我使用 org.javamoney.moneta.Money 类型进行 GET 查询。部署战争时,我得到以下异常1;

我已经关注了reference 并编写了以下代码[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

【问题讨论】:

  • 不知道 exeption 来自哪里,但我认为setCurrency(String currencyCode) 实现没有意义 只有方法(和字段)名称和签名用于匹配 MixIn 注释:访问定义(私有,受保护, ...) 和 方法实现被忽略 wiki.fasterxml.com/JacksonMixInAnnotations
  • @varren 我按照杰克逊文档中的说明做了,但仍然遇到同样的问题。公共静态接口 MixIn { At.JsonIgnore MonetaryAmountFactory setCurrency(CurrencyUnit currency); At.JsonIgnore MonetaryAmountFactory setCurrency(String currencyCode); }

标签: json jackson swagger swagger-2.0 fasterxml


【解决方案1】:

只需在反序列化 setter 方法上使用此注释来指示 Jackson 使用哪个:@com.fasterxml.jackson.annotation.JsonSetter

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-07-06
    • 1970-01-01
    • 2012-07-18
    • 1970-01-01
    • 1970-01-01
    • 2014-04-25
    • 1970-01-01
    相关资源
    最近更新 更多