Jackson ObjectMapper Modülümün doğru şekilde kaydedilmesini sağlayamıyorum.Jackson ObjectMapper'ın Guice/Jersey ile bağlanması
Guice + Jersey + Jackson (FasterXML) yığını kullanıyorum.
Çeşitli sorulara göre ObjectMapper'ı nasıl özelleştireceğinizi takip ettim. Özellikle, bir @ javax.ws.rs.ext.Provider ve bir @ javax.inject.Singleton olarak işaretlenmiş bir ContextResolver bildirimi var. Tek başına bu yapılandırmayla, getContext() asla denir, bu yüzden mapper kayıtlı asla -
@Override
protected Injector getInjector() {
Injector injector = Guice.createInjector(new DBModule(dataSource),
new ServletModule()
{
@Override
protected void configureServlets() {
// Mapper
bind(JacksonOMP.class).asEagerSingleton();
// ...
Map<String, String> initParams = new HashMap<String, String>();
initParams.put("com.sun.jersey.config.feature.Trace",
"true");
initParams.put("com.sun.jersey.api.json.POJOMappingFeature", "true");
serve("/services/*").with(
GuiceContainer.class,
initParams);
}
});
return injector;
}
Mapper Ancak
import javax.inject.Singleton;
import javax.ws.rs.Produces;
import javax.ws.rs.ext.ContextResolver;
import javax.ws.rs.ext.Provider;
@Provider
@Singleton
@Produces
public class JacksonOMP implements ContextResolver<ObjectMapper> {
@Override
public ObjectMapper getContext(Class<?> aClass) {
final ObjectMapper mapper = new ObjectMapper();
mapper.registerModule(new Hibernate4Module());
return mapper;
}
}
tanımlanmış:
Ben çizgisinde bir GuiceServletContextListener var. Tipik bir rehberde sıkışıp kaldım - ek açıklamalar-gizem, aslında yapmam gereken şeylerin pratik olarak izlenemediği yer. Bahar kullanıcıları sadece bileşenin kaydedildiğini rapor eder ve kapsayıcıyı alır. Kendi javax.ws.rs.core.Application uygulamasının geçersiz kılınması hakkında görüşmelerde bulunma konusundaki görüşmeleri yanıtlayın.
This Ancak, bu DefaultResourceConfig() sabit kablolu GuiceContainer jarse-guice impementation olarak görünüyor:
@Override
protected ResourceConfig getDefaultResourceConfig(Map<String, Object> props,
WebConfig webConfig) throws ServletException {
return new DefaultResourceConfig();
}
Burada alt sınıf GuiceContainer gerekiyor? Yoksa eksik olduğum başka bir büyü açıklaması var mı?
Bu yapmak için oldukça yaygın bir şey gibi gözüküyor - Bu guice kombinasyonu ile ne kadar zor olduğunu gösterdiğine şaşırdım.
Bu çok faydalıdır. Benim sorunum aslında * 2 * jacksons (hem codehaus sürümü hem de fastxml sürümü) vardı, bu yüzden yanlış tipte oldukları için objectmappers tamamen göz ardı edildi. – user340535
Aynı bağımlılıklar çakışması sorunu yaşadım (codehaus + fasterxml): 'JsonIgnore' hiç çalışmıyordu. Benim durumumda, jackson codehaus (jackson-mapper-asl veya core-asl) bir azure documentdb paketi bağımlılığı ile bağlantılıydı ve en son (fastxml) sürümü sadece tutmak için tamamen kaldırıldı (pom hariç). Yorumunuz için @ user340535'e teşekkürler, bu da JacksonJsonProvider kancasını düzeltmeme yardımcı oldu! – boly38
Herhangi bir nedenden dolayı, ek açıklamalara sahip sürüm, JerseyGuiceServletContextListener kullanarak Guice 4'te benimle çalışmaz. Buna ne sebep olabilir? Normal ciltleme ve ekstra sınıflar ile sorun olmadan çalışır. – Atais