spring resteasy 開介面時,報錯NoSuchMethodError: com.fasterxml.jackson.databind.ObjectWriter.getFactory() 的

天際流痕發表於2018-12-11

原文地址: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,大家共同學習,共同進步。

相關文章