Jersey, JSON mit Jackson zu Objekten parsen

Wie die Überschrift schon sagt versuche ich mit Jersey abgefragte JSON-Objekte auf Pojos zu parsen. Mein bisheriger Code der funktioniert:

Response response= webTarget
                .request(MediaType.APPLICATION_JSON_TYPE)
                .get();

        String jsonResult =response
                .readEntity(String.class);

        ObjectMapper objectMapper=new ObjectMapper();

        Entity authenticationEntity=objectMapper.readValue(jsonResult,Entity.class);
...

und wie ich mir vorstelle das er funktionieren sollte:

Response response= webTarget
                .request(MediaType.APPLICATION_JSON_TYPE)
                .get();

        String jsonResult =response
                .readEntity(Entity.class);
...```
Habe mich bei der Einrichtung von Jackson an folgende Anleitung gehalten [->Anleitung](https://jersey.java.net/documentation/latest/media.html#json.jackson) und nutze Jackson 2.

Hat jemand eventuell Erfahrung mit Jackson und Jersey und kann mir weiterhelfen?

für den spinnenden RSS-Reader mit inzwischen 4 Meldungen zu deinem Blog-Eintrag kannst du zwar nichts,
aber musste auch noch ein Blog-Eintrag mit demselben Thema sein? :wink:
ein Push hier wäre ja notfalls gleiches Ergebnis


ich habe nicht viel Ahnung vom Thema, verstehe aber strukturell deine Frage nicht, das läßt vielleicht schon Nachfrage zu:
im ersten Code hast du 4 Befehls-Zeilen, die alle wichtig beteiligt aussehen,

im zweiten hast du nur die ersten beiden davon, warum sollten die alleine auch schon was schaffen können?
wolltest du hier eher ganz anderen Code posten?


im ziemlich langen Link sehe ich deinen Code auch nicht allzu komplett,
zwar von ObjectMapper die Rede, aber kein ‘readValue’ oder wenigstens ‘readEntity’ auf der ganzen Seite?

ist ‘Entity’ hier deine konkrete Klasse oder was allgemeines?
klingt so allgemein nach API, zumal direkt bei Aufruf readEntity()…, besser simple Beispiele wie ‘Person’ :wink:


wenn es dir nur darum geht Code kürzer zu machen kannst du ihn vielleicht in Hilfsmethoden verstecken,
statisch oder passend konfigurierte Objekte (etwa Mapper zu einer bestimmten Klasse, generisch?),

wie lang und kompliziert Aufrufe bestimmter APIs sind, ist oftmals reichlich egal

(War das mit dem Blog-Eintrag Absicht?)

Mein Ziel ist es dass Jersey auf Basis des MediaTypes die Antwort automatisch in ein Objekt parsen kann.
Wie im zweiten Beispiel zu sehen. Leider bekomme ich dabei momentan die Fehlermeldung:

Exception in thread "main" org.glassfish.jersey.message.internal.MessageBodyProviderNotFoundException: MessageBodyReader not found for media type=application/json,...

Scheinbar hat Jersey Jacksons Provider nicht angenommen.

Diesen habe ich auf folgende Art versucht einzubinden:

                .packages("xyz")
                .register(JacksonObjectMapperProvider.class)
                .register(JacksonFeature.class);```

Entity soll einfach nur für eine Entity-Klasse stehen(POJO).

und im ersten Beispiel nicht? wieso nicht wenn doch jedes einzelne Zeichen des zweiten Codes auch im ersten drankommt?
ich frage mich immer noch ob du da nicht teils anderen Code posten wolltest, wie nun einen dritten Code,
vielleicht noch einmal alles sauber sortieren?

ich erinnere ebenso nochmal daran, dass in deinem Link nicht mal ‘readValue’ irgendwo aufgetaucht, wäre nicht andere Quelle hilfreich, gibt doch sicher Tutorials?

nach ‘objectMapper readValue’ und ähnlichem kannst du auch selber suchen, hier mal eben ein Ergebnis:
Jackson 2 – Convert Java Object to / from JSON

readEntity ist anscheinend nochmal was anderes, ich hoffe du hast schon den Duchblick dazu,
aber nicht verschont auch noch schnell ein beliebiges Ergebnis:
object - Customize JSON with Jackson using Jersey - Stack Overflow


‘MessageBodyReader not found for media type=application/json’ als Fehlermeldung läßt sich in Suchmaschinen eintippen

java - MessageBodyReader not found for media type=application/json - Stack Overflow
sieht nach paar brauchbaren Antworten aus (Library richtig eingebunden?, Default-Konstruktor in letzter Antwort?),
kommst du dazu weiter oder kannst du Probleme dazu ausschließen oder alles Bahnhof?

Also beim ersten Eintrag sollte als zweites eigentlich

                .request(MediaType.APPLICATION_JSON_TYPE)
                .get();
 
        Entity entity =response
                .readEntity(Entity.class);```
stehen. Es funktioniert jetzt übrigens auch.
Musste nur den Client richtig initialisieren:

```Client client = ClientBuilder.newClient().register(MultiPartFeature.class)
                .register(JacksonFeature.class)
                .register(JacksonObjectMapperProvider.class);```

Können eigentlich alte Einträge nicht mehr bearbeitet werden?

nein/ ja, wie immer auf so eine negierende Frage zu antworten :wink: ,
damit nicht Spaßvögel am Ende ihre Postings zu “-” kürzen

schon ganz gut eine gewisse Konstanz zu haben,

in einem ordentlich konfigurierbaren Forum wäre das sicher etwas, was man einem User ab x Postings dann doch zugestehen würde,
vielleicht 100 (ob Fachbeiträge oder sonstige), da wärst du dann schon dabei :wink:

Dann wären die irritierten Nachfragen allerdings auch seltsam, wenn im ersten Post gleich das richtige stände.
Schön, dass es jetzt klappt, auch wenn ich von der Sache keine Ahnung habe.