我有一個公開幾個REST端點Java Web應用程序。他們都工作。他們可以被擊中並返回預期的數據(純文本)。我需要他們返回JSON。要做到這一點,應用程序需要:澤西JSON構建應用程序,失敗
- 包括「新澤西媒體MOXY」罐子
- 包括
@XmlRootElement
頂上任何POJO我們要轉換成JSON
我加入了@XmlRootElement
到類。我們的項目使用gradle構建。我說這條線給我們的build.gradle文件的dependencies
部分的底部:
compile group: 'org.glassfish.jersey.media', name: 'jersey-media-moxy', version: '2.26'
它看起來幾乎相同它上面的一行:
compile group: 'org.glassfish.jersey.media', name: 'jersey-media-multipart', version: '2.22.2'
除名稱和版本的課程。它建立良好。我必須將jar(jersey-media-moxy-2.26.jar
)添加到我們的依賴關係層次結構中,但沒什麼大不了的。
它運行正常,直到用戶登錄。一些在主屏幕上的部件的缺失,它噴出的錯誤(應用程序始終噴出的錯誤,但他們預期)。新的錯誤是多種多樣的,但重複的一個是:
SEVERE: StandardWrapper.Throwable
java.lang.NoClassDefFoundError: jersey/repackaged/com/google/common/base/Predicate
at org.glassfish.jersey.servlet.ServletContainer.init(ServletContainer.java:177)
at org.glassfish.jersey.servlet.ServletContainer.init(ServletContainer.java:369)
at javax.servlet.GenericServlet.init(GenericServlet.java:158)
...
堆棧跟蹤從來沒有包括任何的我們的源代碼的罪魁禍首。這一切都org.glassfish.jersey
和org.apache.catalina.core
錯誤(我們使用Tomcat作爲我們的服務器)。顯然,有些事情是錯的。
我已經嘗試更多的東西比我喜歡回憶來解決它,但一些包括:
- 在40場左右的依賴,我們有一個不同的位置添加
jersey-media-moxy
(沒有區別) - 明確將所有的
jersey-media-moxy
依賴(即使它關掉了他們的罰款; 沒有區別) - 卸下
jersey-media-multipart
依賴(構建失敗) - 刮痧工作區,做一個新的從源頭控制「得到」,並重新添加
jersey-media-moxy
依賴(沒有區別) - 瞻
jersey-media-multipart
到最新的版本(沒有按」牛逼構建) - 刪除了
jersey-media-moxy
依賴,看看我是否真的需要它(誰知道?也許jersey-media-multipart
已經包含了它),並改變了我就要回一個非常簡單的類對象(它只是包含了string
)。 (失敗,它確實需要jersey-media-moxy
)
我這裏是唯一的Java開發人員,這是我第一次使用或的gradle新澤西州。還有其他方法可以生成JSON,我知道(比如使用gson),但我們真的希望讓Jersey做到這一點,因爲我們已經在使用該框架了。
我們使用Eclipse(Oxygen)作爲我們的IDE和Tomcat作爲我們的服務器。
我有一個大問題是爲什麼新的jar打破了現有的jar?
第二個問題是大問題,當然是:我該怎麼辦才能解決這個問題?
您的2.26和2.22.2差異可能是問題所在。不要混用你的澤西模塊版本。 –
呃,dang,@peeskilet,就是這樣!我希望你已經發布了這個答案,所以我可以將其標記爲這樣。將版本號提高到2.26無效,但降級到2.22.2。非常感謝!我不知道這一點,我感到很蠢,但我現在有一個工作的應用程序! – Frecklefoot