天天看點

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

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