У меня есть класс ShipmentRequest, который был инициализирован через JAXB.
В моем основном классе для отправки POST-запроса REST-API я заполняю объект этого класса необходимым вводом и помещаю его в JSONArray
public JSONArray array = new JSONArray();
array.add(shipmentRequest);
И, наконец, я начинаю POST:
HttpResponse<JsonNode> response = Unirest.post("https://someURL/services/rest/url")
.queryString("access_token","someTokenCode")
.body(array.get(0)).asJson();
Я не понимаю ошибку, потому что когда я использую myJSONArray.toJSONString (), я получаю следующий вывод:
[{"Id":"123456","Reference":"Send","transport":{"transporterCode":"Deliverer","trackAndTrace":"someCode123456"}}]
Что мне не хватает? Мой первый персонаж это '['?
РЕДАКТИРОВАТЬ 1, код запроса на отгрузку
<code>//
// Diese Datei wurde mit der JavaTM Architecture for XML Binding(JAXB) Reference Implementation, v2.2.8-b130911.1802 generiert
// Siehe <a href="http://java.sun.com/xml/jaxb">http://java.sun.com/xml/jaxb</a>
// Änderungen an dieser Datei gehen bei einer Neukompilierung des Quellschemas verloren.
// Generiert: 2017.10.18 um 11:02:47 AM CEST
//
package bol.shipment;
import javax.xml.bind.annotation.XmlAccessType;
import javax.xml.bind.annotation.XmlAccessorType;
import javax.xml.bind.annotation.XmlElement;
import javax.xml.bind.annotation.XmlRootElement;
import javax.xml.bind.annotation.XmlType;
/**
* <p>Java-Klasse für anonymous complex type.
*
* <p>Das folgende Schemafragment gibt den erwarteten Content an, der in dieser Klasse enthalten ist.
*
* <pre>
* <complexType>
* <complexContent>
* <restriction base="{http://www.w3.org/2001/XMLSchema}anyType">
* <sequence>
* <element name="OrderItemId" type="{http://www.w3.org/2001/XMLSchema}long"/>
* <element name="ShipmentReference" type="{http://www.w3.org/2001/XMLSchema}string"/>
* <element name="Transport" minOccurs="0">
* <complexType>
* <complexContent>
* <restriction base="{http://www.w3.org/2001/XMLSchema}anyType">
* <sequence>
* <element name="TransporterCode" type="{http://www.w3.org/2001/XMLSchema}string" minOccurs="0"/>
* <element name="TrackAndTrace" type="{https://plazaapi.bol.com/services/xsd/v2/plazaapi.xsd}TrackAndTrace" minOccurs="0"/>
* </sequence>
* </restriction>
* </complexContent>
* </complexType>
* </element>
* <element name="ShippingLabelCode" type="{http://www.w3.org/2001/XMLSchema}string" minOccurs="0"/>
* </sequence>
* </restriction>
* </complexContent>
* </complexType>
*
*
*
* /
@XmlAccessorType (XmlAccessType.FIELD)
@XmlType (name = "", propOrder = {
"OrderItemId",
"ShipmentReference",
"транспорт",
})
@XmlRootElement (name = "ShipmentRequest")
открытый класс ShipmentRequest {
@XmlElement (name = "OrderItemId")
защищенный String orderItemId;
@XmlElement (name = "ShipmentReference", обязательно = true)
защищенная строка
@XmlElement (name = "Transport")
охраняемая пересылка по запросу. Транспортный транспорт;
/ **
* Ruft den Wert der orderItemId-Eigenschaft ab.
*
* /
public String getOrderItemId () {
return orderItemId;
}
/ **
* Legt den Wert der orderItemId-Eigenschaft fest.
*
* /
public void setOrderItemId (String value) {
this.orderItemId = value;
}
/ **
* Ruft den Wert der shipmentReference-Eigenschaft ab.
*
* @вернуть
* возможный объект
* {@link String}
*
* /
public String getShipmentReference () {
возврат товара
}
/ **
* Legt den Wert der shipmentReference-Eigenschaft fest.
*
* @param value
* разрешенный объект
* {@link String}
*
* /
public void setShipmentReference (String value) {
this.shipmentReference = значение;
}
/ **
* Ruft den Wert der transport-Eigenschaft ab.
*
* @вернуть
* возможный объект
* {@link ShipmentRequest.Transport}
*
* /
public ShipmentRequest.Transport getTransport () {
обратный транспорт;
}
/ **
* Legt den Wert der transport-Eigenschaft fest.
*
* @param value
* разрешенный объект
* {@link ShipmentRequest.Transport}
*
* /
public void setTransport (значение ShipmentRequest.Transport) {
this.transport = value;
}
/ **
*
Java-Klasse для анонимного сложного типа.
*
*
Das folgende Schemafragment gibt den erwarteten Содержит информацию о дизеле в классе Klasse enthalten ist.
*
*
* <complexType>
* <complexContent>
* <restriction base="{http://www.w3.org/2001/XMLSchema}anyType">
* <sequence>
* <element name="TransporterCode" type="{http://www.w3.org/2001/XMLSchema}string" minOccurs="0"/>
* <element name="TrackAndTrace" type="{https://plazaapi.bol.com/services/xsd/v2/plazaapi.xsd}TrackAndTrace" minOccurs="0"/>
* </sequence>
* </restriction>
* </complexContent>
* </complexType>
*
*
*
* /
@XmlAccessorType (XmlAccessType.FIELD)
@XmlType (name = "", propOrder = {
"TransporterCode",
"TrackAndTrace"
})
открытый статический класс Transport {
@XmlElement (name = "TransporterCode")
защищенный String transporterCode;
@XmlElement (name = "TrackAndTrace")
защищенный String trackAndTrace;
/ **
* Ruft den Wert der transporterCode-Eigenschaft ab.
*
* @вернуть
* возможный объект
* {@link String}
*
* /
public String getTransporterCode () {
возвратный транспортный код;
}
/ **
* Legt den Wert der transporterCode-Eigenschaft Fest.
*
* @param value
* разрешенный объект
* {@link String}
*
* /
public void setTransporterCode (String value) {
this.transporterCode = value;
}
/ **
* Ruft den Wert der trackAndTrace-Eigenschaft ab.
*
* @вернуть
* возможный объект
* {@link String}
*
* /
public String getTrackAndTrace () {
return trackAndTrace;
}
/ **
* Legt den Wert der trackAndTrace-Eigenschaft Fest.
*
* @param value* разрешенный объект
* {@link String}
*
* /
public void setTrackAndTrace (String value) {
this.trackAndTrace = value;
}
}
}
РЕДАКТИРОВАТЬ 2:
Мой запрос должен выглядеть так!
<ShipmentRequest xmlns="https://plazaapi.bol.com/services/xsd/v2.1/plazaapi.xsd">
<OrderItemId>1234567890</OrderItemId>
<ShipmentReference>A321SR</ShipmentReference>
<Transport>
<TransporterCode>TNT</TransporterCode>
<TrackAndTrace>3SBOL0987654321</TrackAndTrace>
</Transport>
</ShipmentRequest>
РЕДАКТИРОВАТЬ 3:
Я попытался заполнить JSONObject этими:
private JSONArray shipmentRequestArray = new JSONArray();
private JSONArray transportArray = new JSONArray();
private JSONObject requestObject = new JSONObject();
transportArray.add(new JSONObject().append("TransporterCode", transporter_Code));
transportArray.add(new JSONObject().append("TrackAndTrace", track_And_Trace));
shipmentRequestArray.add(new JSONObject().append("OrderItemId", orderItemIdTEST));
shipmentRequestArray.add(new JSONObject().append("ShipmentReference", shipment_Reference));
shipmentRequestArray.add(transportArray);
requestObject.put("ShipmentRequest", shipmentRequestArray);
И когда я попробовал это с:
.body(requestObject).asJson();
Я получаю новую ошибку:
Не найден сериализатор для класса org.codehaus.jettison.json.JSONObject и не обнаружены свойства для создания BeanSerializer
РЕДАКТИРОВАТЬ 4:
Мой пример ответа должен выглядеть так:
Status: 201 created
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<ns1:ProcessStatus xmlns:ns1="https://plazaapi.bol.com/services/xsd/v2/plazaapi.xsd">
<ns1:id>1</ns1:id>
<ns1:sellerId>1084486</ns1:sellerId>
<ns1:entityId>1234567890</ns1:entityId>
<ns1:eventType>CONFIRM_SHIPMENT</ns1:eventType>
<ns1:description>Confirm shipment for order item 1234567890.</ns1:description>
<ns1:status>PENDING</ns1:status>
<ns1:createTimestamp>2016-02-17T17:30:00.142+01:00</ns1:createTimestamp>
<ns1:Links>
<ns1:link ns1:method="GET" ns1:href="https://plazaapi.bol.com/services/rest/process-status/v2/1234567" ns1:rel="self"/>
</ns1:Links>
</ns1:ProcessStatus>