如何克服“属性的二传手定义冲突"? [英] How to overcome "Conflicting setter definitions for property "?

查看:141
本文介绍了如何克服“属性的二传手定义冲突"?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我使用 com.fasterxml.jackson io.swagger 库.在我的REST端点中,我将 org.javamoney.moneta.Money 类型用于GET查询.部署战争时,出现以下异常 1 ;

I use com.fasterxml.jackson and io.swagger libraries. In my REST endpoint I use org.javamoney.moneta.Money type for a GET query. When deploying the war i get following exception 1;

我已遵循此参考并编写了以下代码[2];并在@ApplicationPath上注册.但是仍然遇到同样的问题.任何指导会真的有帮助吗?

I have followed this reference and wrote following code[2]; and registered it at @ApplicationPath. But still getting same issue. Any guide would be really helpful?

@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

推荐答案

只需在反序列化设置器方法上使用此注释即可指示杰克逊所使用的方法:@ com.fasterxml.jackson.annotation.JsonSetter

Simply use this annotation on the deserialization setter method to indicate Jackson wich one to use: @com.fasterxml.jackson.annotation.JsonSetter

这篇关于如何克服“属性的二传手定义冲突"?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆