如何在使用依賴關係在jar中定義另一個對象映射器的情況下如何使對象映射器正常工作?使用ObjectMapper添加JAR使得我的ObjectMapper不可發現
我正在嘗試使用Swagger和Jersey 2,它正在Jetty下運行。問題是,只要我將Swagger JAX-RX jar添加到類路徑中,我的對象映射器就沒有被發現,因此我失去了我的對象的自定義序列化。
這裏是我的對象映射如何定義
@Provider
public class ObjectMapperProvider implements ContextResolver<ObjectMapper> {
}
我已經發布了issue招搖的維護者,你可以閱讀細節。
經過幾小時的澤西內部調試後,我發現Swagger自己的對象映射器com.wordnik.swagger.jaxrs.json.JacksonJsonProvider調用super.setMapper(commonMapper)
,它將非空值設置爲ProviderBase._mapperConfig._mapper
。後來,當HTTP請求處理程序試圖序列我類別的呼叫例如在ProviderBase.locateMapper
結束了已在正確的代碼流_mapperConfig.getConfiguredMapper()
返回空隨後引起_locateMapperViaProvider
指找到我的自定義映射器調用以下機身
public MAPPER locateMapper(Class<?> type, MediaType mediaType)
{
// First: were we configured with a specific instance?
MAPPER m = _mapperConfig.getConfiguredMapper();
if (m == null) {
// If not, maybe we can get one configured via context?
m = _locateMapperViaProvider(type, mediaType);
if (m == null) {
// If not, let's get the fallback default instance
m = _mapperConfig.getDefaultMapper();
}
}
return m;
}
。使用Swagger它默認爲com.fasterxml.jackson.jaxrs.json.JsonMapperConfigurator
,我的自定義json序列化程序永遠不會被調用。
我創建了一個再現此問題的小項目here。
你們會建議如何解決這個問題?我可以在TTLocalDate
類型的每個屬性上指定反序列化器,但它會污染代碼:(