原文位址:http://www.5ixiudou.com/portal/detailInfo/1000000005/231
編輯器:idea
報錯現象:在使用reasteasy 在 spring 中開開放接口時,在postman中調用接口報錯:NoSuchMethodError: com.fasterxml.jackson.databind.ObjectWriter.getFactory()。
報錯原因:
jackson jar包版本過低。
排查過程:
1.判斷是否是jar包沖突:首先看項目中引入了幾個包含該類的jar包。ctrl+n,看到就引入了一個包含該類的jar包,應該不是jar包沖突。
2.進一步判斷是否是jar包沖突:進入jar包中的ObjectWriter類,檢視是否是缺少getFactory()方法。經過檢視,果真木有這個方法,看來不是沖突,而是确實缺少這個方法。
3.基本确定是jar包版本的問題。一般會因為jar包版本過低造成這種情況。上網搜 databind json 版本,發現有更高的版本。修改maven依賴更高版本的jackson包,我是用 2.4.1版本解決的這個問題,依賴如下:
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-core</artifactId>
<version>2.4.1</version>
</dependency>
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-databind</artifactId>
<version>2.4.1</version>
</dependency>
<dependency>
<groupId>com.fasterxml.jackson.jaxrs</groupId>
<artifactId>jackson-jaxrs-json-provider</artifactId>
<version>2.4.1</version>
<exclusions>
<exclusion>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-annotations</artifactId>
</exclusion>
</exclusions>
</dependency>
注意:可能jackson有更高版本的,但是是慎用,要看代碼環境,有時過高的版本會出現其他問題。就選擇一個中間版本就可以了。
當然,如果沒有使用maven,可以手動導入下面的jar包。如果需要其他版本的jar包,可以聯系我。
jar包下載下傳位址:http://www.5ixiudou.com/portal/detailInfo/1000000005/231
注意事項:
1.當發現jar包版本過低時,應當适當提高jar包版本,但不适宜太高。
2.如果依賴其他子產品,一定要确認其他子產品中的jackson相關依賴的版本,最好不要隻修改一部分依賴的版本。比如,我的core和databind是在 demo-core 子產品下,provider是在 demo-web 子產品下,這時不要隻修改 demo-web 子產品下的 pom.xml,demo-core中的也要進行修改。
更多内容,請關注我的個人網站:www.5ixiudou.com,大家共同學習,共同進步。