Jersey: Jackson Feature

saw

Mitglied
Hi, ich versuche micht gerade mit Jersey und Jackson um POJOs in JSON zu wandeln und umgekehrt. Ich habe mir folgende libraries in mein Projekt aufgenommen:

aopalliance-repackaged-2.2.0.jar
asm-all-repackaged-2.2.0.jar
commons-codec-1.6.jar
commons-logging-1.1.3.jar
fluent-hc-4.3.3.jar
hk2-api-2.2.0.jar
hk2-locator-2.2.0.jar
hk2-utils-2.2.0.jar
httpclient-4.3.3.jar
httpclient-cache-4.3.3.jar
httpcore-4.3.2.jar
httpmime-4.3.3.jar
jackson-annotations-2.2.3.jar
jackson-core-2.2.3.jar
jackson-databind-2.2.3.jar
javassist-3.18.1-GA.jar
javax.annotation-api-1.2.jar
javax.inject-2.2.0.jar
javax.servlet-api-3.0.1.jar
javax.ws.rs-api-2.0.jar
jaxb-api-2.2.7.jar
jersey-client.jar
jersey-common.jar
jersey-container-servlet-core.jar
jersey-container-servlet.jar
jersey-guava-2.7.jar
jersey-server.jar
org.osgi.core-4.2.0.jar
osgi-resource-locator-1.0.1.jar
persistence-api-1.0.jar
validation-api-1.1.0.Final.jar

Also alles was das Jersey ZIP File for non-maven developers her gibt. Den Download habe ich von https://jersey.java.net/download.html in der Version 2.7.

Laut Dokumentation (https://jersey.java.net/documentation/latest/media.html#json.jackson) muss ich einen ObjectMapperProvider anbieten und das JacksonFeature registrieren:

Code:
@Provider
public class MyObjectMapperProvider implements ContextResolver<ObjectMapper> {
 
    final ObjectMapper defaultObjectMapper;
    final ObjectMapper combinedObjectMapper;
 
    public MyObjectMapperProvider() {
        defaultObjectMapper = createDefaultMapper();
        combinedObjectMapper = createCombinedObjectMapper();
    }
 
    @Override
    public ObjectMapper getContext(Class<?> type) {
        if (type == CombinedAnnotationBean.class) {
            return combinedObjectMapper;
        } else {
            return defaultObjectMapper;
        }
    }
 
    private static ObjectMapper createDefaultMapper() {
        final ObjectMapper result = new ObjectMapper();
        result.configure(Feature.INDENT_OUTPUT, true);
 
        return result;
    }
 
    // ...
}

Hier ist mein Problem, dass er Feature.IDENT_OUTPUT nicht finden kann.

Code:
// Create JAX-RS application.
final Application application = new ResourceConfig()
        .packages("org.glassfish.jersey.examples.jackson")
        .register(MyObjectMapperProvider.class)  // No need to register this provider if no special configuration is required.
        .register(JacksonFeature.class);

Hier kann er JacksonFeature.class nicht finden.

Weiss jemand Rat?
 
Zuletzt bearbeitet:

saw

Mitglied
Hi, dein Beispiel benutzt Jersey < 2.x und soweit ich das verstanden habe, hat sich das mit dem POJOMappingFeature in 2.x geaendert. Jetzt muss man eben dieses JerseyFeature registrieren (siehe Problem oben). Ich bin in meinem Projekt jetzt auf Jersey < 2.x umgestiegen - optimal finde ich das nicht, aber funktionieren tuts. Falls jemand noch die Loesung haben sollte werde ich wieder auf 2.x gehen.

Gruesse
saw
 

Ähnliche Java Themen

Neue Themen


Oben