Wir verwenden IBM (s) bündelt Apache Wink, um JAXRS-Endpunkte für unsere Anwendung anzubieten. Wir codieren Websphere 8.5.5. Da wir Servlet 3.0-kompatibel sind, verwenden wir die "programmatische" Art der Konfiguration der JaxRS-Anwendung, dh keine Einträge in web.xml, und wir verlassen uns auf Klassenscan für annotierte jax rs-Ressourcen. Im Allgemeinen funktioniert es gut.Überschreiben Jackson Object Mapper-Eigenschaften auf Websphere 8.5.5 mit Apache Wink
@ApplicationPath("/api/v1/")
public class MyApplication extends Application{
Diese Version von Websphere zusammen mit Apache Wink verwendet Jackson 1.6.x für JSON de/Serialisierung und es funktioniert gut im Allgemeinen. Wir möchten jedoch einige der Standardwerte des Object Mappers ändern.
Also haben wir einen Customer Context Resolver definiert, wo nur einige der se/deserialzation Eigenschaften geändert werden.
@Provider
@Produces(MediaType.APPLICATION_JSON)
public class CustomJackssonConverter implements ContextResolver<ObjectMapper> {
final ObjectMapper defaultObjectMapper;
public AibasJackssonConverter() {
defaultObjectMapper = createDefaultMapper();
}
...
mapper.getSerializationConfig().set(SerializationConfig.Feature.INDENT_OUTPUT, true);
Während JAX-RS Anrufe können wir sehen, dass der Behälter die neuen Provider registriert, ohne Fehler
Das Problem ist, dass die Konfiguration nicht ‚gefolgt‘, aus den Protokollen kann ich sehen, dass Die Wink-Engine sucht nach einem WinkJacksonProvider, der wiederum einen JacksonProvider zurückgibt, der die Jackson-Standardwerte einhält.
Gibt es eine Möglichkeit, nur diesen Standardwert zu ändern?
Ich habe versucht, die Implementierung des Application-Objekts wie hier angegeben zu ändern, um Provider programmgesteuert zu konfigurieren, aber es hat nicht funktioniert.
http://www.ibm.com/developerworks/java/library/wa-aj-jackson/index.html
Irgendwelche Hinweise oder Tipps?
Vielen Dank
Haben Sie das WebSphere-Forum ausprobiert? http://ibm.biz/websphere-forum – dbreaux
Ich kann das auch nicht zur Arbeit bringen. Wenn ich einen JacksonJsonProvider in die Anwendung getClasses() einschließe. Websphere wird Jackson benutzen. Aber es gibt keine Möglichkeit, Jackson anzupassen. Wenn ich stattdessen einen benutzerdefinierten konfigurierten JacksonJsonProvider in der Anwendung getSingletons() einschließe. Websphere wird es nicht verwenden. No Response-Objekte (oder ihre Nutzdaten) werden serialisiert. Die REST-Methode, die einen Antworttext zurückgeben soll, gibt nichts zurück. (Das Leben ist mit TomcateE so viel einfacher.) – devdanke