Java Jackson POJOPropertyBuilder在POJO中找到多个setter

Java Jackson POJOPropertyBuilder在POJO中找到多个setter,java,spring-mvc,jackson,swagger,Java,Spring Mvc,Jackson,Swagger,我们正在使用SpringWebMVC3.2.2和JacksonDataBind2.4.4(以及许多其他LIB…)开发一个相当大的JSONRESTAPI 我正在尝试使用,但我们的一些DTO有问题 无论我使用简单的@EnableSwagger还是更复杂的swagger配置,在启动Tomcat 7时总是会出现以下异常: java.lang.IllegalArgumentException: Conflicting setter definitions for property "year": java

我们正在使用SpringWebMVC3.2.2和JacksonDataBind2.4.4(以及许多其他LIB…)开发一个相当大的JSONRESTAPI

我正在尝试使用,但我们的一些DTO有问题

无论我使用简单的
@EnableSwagger
还是更复杂的swagger配置,在启动Tomcat 7时总是会出现以下异常:

java.lang.IllegalArgumentException: Conflicting setter definitions for property "year": javax.xml.datatype.XMLGregorianCalendar#setYear(1 params) vs javax.xml.datatype.XMLGregorianCalendar#setYear(1 params)
at com.fasterxml.jackson.databind.introspect.POJOPropertyBuilder.getSetter(POJOPropertyBuilder.java:303)
at com.mangofactory.swagger.models.Annotations.findPropertyAnnotation(Annotations.java:33)
at com.mangofactory.swagger.models.property.bean.BeanModelProperty.<init>(BeanModelProperty.java:26)
at com.mangofactory.swagger.models.property.bean.BeanModelPropertyProvider.beanModelProperty(BeanModelPropertyProvider.java:166) (...rest of stacktrace )
java.lang.IllegalArgumentException:属性“year”的setter定义冲突:javax.xml.datatype.XMLGregorianCalendar#setYear(1个参数)与javax.xml.datatype.XMLGregorianCalendar#setYear(1个参数)
位于com.fasterxml.jackson.databind.introspect.POJOPropertyBuilder.getSetter(POJOPropertyBuilder.java:303)
位于com.mangofactory.swagger.models.Annotations.findPropertyAnnotation(Annotations.java:33)
位于com.mangofactory.swagger.models.property.bean.BeanModelProperty。(BeanModelProperty.java:26)
位于com.mangofactory.swagger.models.property.bean.BeanModelPropertyProvider.beanModelProperty(BeanModelPropertyProvider.java:166)(…stacktrace的其余部分)
上面提到的属性“year”只是一个示例,在没有包含属性year的类的情况下尝试了相同的方法

奇怪的是,Jackson想要两次找到完全相同的方法/setter:
javax.xml.datatype.xmlgoriancalendar#setYear(1个参数)
vs
javax.xml.datatype.xmlgoriancalendar#setYear(1个参数)

我花了一些时间使用调试器,并注意到一些DTO似乎通过了冲突设置程序的检查

我现在已经花了很多时间在这个问题上,无法想出一个解决方案。我在谷歌发现的这个例外的大多数页面都在谈论重载方法/设置器,这与我的DTO不同——它们是简单的对象,只有属性、设置器和获取器


任何帮助都将不胜感激。

问题是
xmlgoriiancalendar
有两种
setYear
方法:
setYear(int year)
setYear(BigDecimal year)
。您需要告诉swagger忽略其中一种方法,您可以为
xmlgoriiancalendar
配置一个方法,以便只使用getter(类似)。如果XMLGregorianCalendar仅在返回值的上下文中使用,这将起作用

如果不是这样,您可以使用
directModelSubstitute
设置替换类型。配置时,您可以使用以下选项之一

@Bean
在yourPlugin()中公开炫耀{
...
plugin.directModelSubstitute(XMLGregorianCalendar.class,String.class)
//或者,这取决于你打算如何使用它,以及你想如何使用它
//要显示在swagger UI上的序列化/反序列化类型
plugin.directModelSubstitute(XMLGregorianCalendar.class,Date.class)
...
返回插件
}

或者,如果您不关心API文档中所表示的类型,您可以。

我批准了一个编辑,但它相当重要,最好作为第二个答案-如果不是因为信用卡的话。)也许下次吧。正如您可能已经猜到的,我在上的声誉,所以我是个傻瓜:)我正要写同样的东西,如果是一个新的答案会更好抱歉,如果我超越了一个如此礼节的话。不,我很高兴你提高了我答案的质量,但这是一个重要的编辑,你应该为任何潜在的升级投票获得所有的积分。