Для написания теста для определенной функции мне нужно привести строку, содержащую []
, в JsonNode.
Проблема заключается в том, что при сопоставлении его с JsonNode, похоже, к нему добавляются дополнительные кавычки.
То, что я ожидаю "[]", но то, что я получаю "" [] "", что приводит к провалу теста.Когда я отлаживаю код в нормальной работе, я получаю только «[]» при тестировании кода с Postman вместо неработающего «« [] »«, который я получаю только во время тестов.
Этокак выглядит мой DTO в Spring Boot
import com.fasterxml.jackson.annotation.JsonCreator;
import com.fasterxml.jackson.annotation.JsonProperty;
import com.fasterxml.jackson.databind.JsonNode;
public class PostLabelDTO {
private final String templateId;
private final String labels;
@JsonCreator
public PostLabelDTO(
final @JsonProperty("templateId") String templateId,
final @JsonProperty("labels") JsonNode labels
) {
this.templateId = templateId;
this.labels = labels.toString();
}
public String getId() {
return templateId;
}
public String getData() {
return labels;
}
}
Мой тест должен подделать этот объект со свойствами для передачи методу, который будет проверен.
Мой тест выглядит следующим образом:
@Test
public void getEmptyDocumentException() throws InvalidBarcodeException, EmptyStringException, InvalidBarcodeGeometryException, EmptyFieldException, TemplateNotFoundException, InvalidBarcodeStrategyException {
//defining an ID for the templateId JsonProperty
final String templateId = "fj2j931j2ijd1";
//this is the "labels" JsonNode that gets sent in through the Post request
//i checked 10 times how the value comes into the DTO and it was always "[]" (empty labels (document) object, for which I wrote this test for)
final String jsonString = "[]";
ObjectMapper mapper = new ObjectMapper();
mapper.enable(JsonParser.Feature.ALLOW_MISSING_VALUES);
JsonNode labels = mapper.valueToTree(jsonString);
//when I do this, the "[]" which is normally passed into the PostLabelDTO, becomes ""[]"", so there are extra quotes added
PostLabelDTO dto = new PostLabelDTO(templateId, labels);
final Document document = new Document(dto, templateRepository);
Exception resultingException = null;
try {
document.getPDF();
} catch (Exception e) {
e.printStackTrace();
assertThat(resultingException).isExactlyInstanceOf(EmptyDocumentException.class);
}
}
Таким образом, я попытался поместить вышеуказанный Json в новый экземпляр PostLabelDTO
в качестве объекта labels
JsonNode для тестирования, но он не работает.
Это запрос, с которым он работает через почтальона (он работает как, он выдает правильное исключение)
{
"templateId":"5b1140608134691d1804e74e",
"labels":[]
}
Так что в основном я попытался поместить вышеупомянутый Json в новый экземпляр PostLabelDTO
какlabels
Объект JsonNode для тестирования, но он не работает.
Это рабочий запрос (который возвращает PDF-файл с метками на каждой странице)
{
"templateId": "5b1140608134691d1804e74e",
"labels": [{
"data": {
"Ivolgnr": "Volgnr",
"Ilkw-nr": "Ilkw-nr",
"bedrijf": "Hornbach",
"wagenNr": "13513542626",
"barcode": {
"waarde": "9780471117094"
},
"leverdatumVan": "x",
"leverdatumNaar": "x",
"orderList": [{
"order": [{
"articlenumber": "29-840-4512"
},
{
"description": "Mooie grote plant"
},
{
"ordernumber": "3584479012860361"
},
{
"amount": "20"
},
{
"sellprice": "€5,00"
},
{
"deliverydate": "01-09-2018"
}
]
},
{
"order": [{
"articlenumber": "29-840-4512"
},
{
"description": "Mooie grote plant"
},
{
"ordernumber": "3584479012860361"
},
{
"amount": "20"
},
{
"sellprice": "€5,00"
},
{
"deliverydate": "01-09-2018"
}
]
},
{
"order": [{
"articlenumber": "29-840-4512"
},
{
"description": "Mooie grote plant"
},
{
"ordernumber": "3584479012860361"
},
{
"amount": "20"
},
{
"sellprice": "€5,00"
},
{
"deliverydate": "01-09-2018"
}
]
},
{
"order": [{
"articlenumber": "29-840-4512"
},
{
"description": "Mooie grote plant"
},
{
"ordernumber": "3584479012860361"
},
{
"amount": "20"
},
{
"sellprice": "€5,00"
},
{
"deliverydate": "01-09-2018"
}
]
},
{
"order": [{
"articlenumber": "29-840-4512"
},
{
"description": "Mooie grote plant"
},
{
"ordernumber": "3584479012860361"
},
{
"amount": "20"
},
{
"sellprice": "€5,00"
},
{
"deliverydate": "01-09-2018"
}
]
}
]
}
}, {
"data": {
"Ivolgnr": "22324rff",
"Ilkw-nr": "246426246",
"bedrijf": "bedrijfffff",
"wagenNr": "wagennrrrrrrr",
"barcode": {
"waarde": "9780471117094"
},
"leverdatumVan": "x",
"leverdatumNaar": "x",
"orderList": [{
"order": [{
"articlenumber": "a"
},
{
"description": "b"
},
{
"ordernumber": "c"
},
{
"amount": "d"
},
{
"sellprice": "e"
},
{
"deliverydate": "f"
}
]
}]
}
}]
}
ВНИМАНИЕ Схема метки (называемая данными для каждогоБел в этом запросе) всегда может варьироваться в зависимости от того, какой шаблон используется для заполнения.Поэтому нет возможности создать объект Label, содержащий все свойства, поскольку они всегда различаются (зависит от HTML-кода шаблона, который должен быть заполнен этим запросом. Мой сервис выполняет «поиск и замену» на основе имени свойства тега.
Я уже пробовал это: Как проанализировать строку JSON в JsonNode в Джексоне?
Но я не могу добавить пустой массив к объекту JsonNode в качестве егодолжен.
Может кто-нибудь помочь мне?
С уважением,
Али