Java REST Client + Json

Hallo,
ich wäre sehr dankbar über einen Tip, in der folgenden Angelegenheit. Ich möchte mittels Java (EE7 und JDK 8) folgenden curl Befehl nachbauen:

curl -X POST --header "Content-Type: application/json" --header "Accept: application/json" --header "Authorization: Basic APIKEYjsjsj "{
\"customer_id\": 180791226,
\"items\": [
{ \"number\": \"2\", \"quantity\": 2, \"single_price_net\": 1680.6723, \"vat_percent\": 19 }
], } " "https://urlxkxkx"

Es funktioniert, bis auf das Json-Array "items". Bis jetzt habe ich folgendes:
2 Pojo-Klassen für die Elemente:


Java:
public class Bill implements Serializable {

private int customer_id;
private List <Items> items;
.... getter und setter
}

public class Items implements Serializable {
private int number;
private int quantity;
private double single_price_net;
private int vat_percent;

    public Items(int number, int quantity, double
    single_price_net) {
        this.number = number;
        this.quantity = quantity;
        this.single_price_net = single_price_net;
        this.vat_percent = 19;
    }
.... getter und setter
Zum Testen dann folgendes:

Java:
Bill bill = new Bill();
List<Items> order = new ArrayList();
order.add(new Items(2, 1, 16));
bill.setItems(order);
bill.setCustomer_id(180791226);

Client client = ClientBuilder.newClient();
Response response = client
                .target("https://url....yxy")
                .queryParam("q", "someQuery")
                .request("application/json")           
                .header("Content-Type", "application/json")      
                .header("authorization", "Basic APIKEY")
                .post(Entity.json(bill));

Auf die Art und Weise kann ich die customer_id zum Server senden, aber nicht die Inhalte innerhalb des Arrays. Hat jemand einen Tip für mich?

Viele Grüße

Swinkel

 
Ja, nur customer_id funktioniert. Die Bezeichnung habe ich der API-Doku vom Server entnommen. Wenn ich die Elemente im Array dem POST-Befehl mitgebe, funktioniert es nicht und im Log von der Clientseite steht:

org.glassfish.jersey.message.internal.MessageBodyProviderNotFoundException: MessageBodyWriter not found for media type=application/json, type=class net.netzfabrik.model.Bill, genericType=class net.netzfabrik.model.Bill.

Noch ne Idee?
 
Hi vielen Dank für den Tip mit den Annotations und Variablennamen. Das ist gut. Das noch etwas fehlen könnte, hab ich mir auch schon gedacht und gegoogelt was man braucht. Ehrlich gesagt, steige ich bei den vielen Möglichkeiten nicht mehr durch. Da der POST ohne Array funktioniert, war meine Hoffnung, dass vielleicht mit JEE7 und JDK 8 doch nichts fehlt :).
 
jersey-media-json-jackson hat bis jetzt nichts verändert, muss aber noch gucken, ob ich da vielleicht irgendwas ändern muss, damit das angewendet wird. Sorry, bin Anfänger :).
Bei dem Request ohne Array, bestand das Objekt nur aus der customer_id, sonst war alles gleich. Ich teste mal weiter.
 
Jetzt funktioniert es. Jackson war der richtige Tip. Ich habe als Lib "jackson-databind.jar" hinzugefügt. Und dann wie folgt das Json erstellt:
(bill = objekt)

Java:
ObjectMapper mapper = new ObjectMapper();
String serialized = mapper.writeValueAsString(bill);
Client client = ClientBuilder.newClient();
Response response = client
                .target("https://api.url.......")
                .queryParam("q", "someQuery")
                .request("application/json")
                .header("authorization", "Basic jsjsjjsjAPI-Key")
                .post(Entity.json(serialized));
Besten Dank nochmal und eine schöne Woche.
 
Passende Stellenanzeigen aus deiner Region:

Oben