Я пытаюсь создать тестовые наборы / наборы для метода API, который ожидает объект JSON, который выглядит следующим образом {"arr": [5, 3, 1, 2]}
Но, похоже, то, как я это делаю, вызывает неправильное форматирование json.
Как создать действительный JSON для тестирования моего API?
Я пробовал пару вещей, но безуспешно. Мой JSON в настоящее время форматируется с дополнительными "
, как это ""{'arr': [99, 2, 4, 1, 55, 0]}""
Это мой код.
@Test
public void sortWithSimpleArray(TestContext context) {
Async async = context.async();
// This isn't working
final String json = Json.encodePrettily("{'arr': [99, 2, 4, 1, 55, 0]}");
vertx.createHttpClient().post(port, "localhost", "/api/sort/bubble")
.putHeader("content-type", "application/json")
.putHeader("content-length", Integer.toString(json.length()))
.handler(response -> {
context.assertEquals(response.statusCode(), 201);
context.assertTrue(response.headers().get("content-type").contains("application/json"));
response.bodyHandler(body -> {
JsonArray sortedArr = body.toJsonArray();
context.assertEquals(sortedArr, "[ 0, 1, 2, 4, 55, 99 ]");
async.complete();
});
})
.write(json)
.end();
}
Получение этой ошибки:
SEVERE: Unexpected exception in route
io.vertx.core.json.DecodeException: Failed to decode:Cannot construct instance of `java.util.LinkedHashMap` (although at least one Creator exists): no String-argument constructor/factory method to deserialize from String value ('{'arr': [99, 2, 4, 1, 55, 0]')
at [Source: (io.netty.buffer.ByteBufInputStream); line: 1, column: 1]
at io.vertx.core.json.Json.decodeValue(Json.java:172)
at io.vertx.core.json.JsonObject.fromBuffer(JsonObject.java:960)
at io.vertx.core.json.JsonObject.<init>(JsonObject.java:73)
at io.vertx.ext.web.impl.RoutingContextImpl.getBodyAsJson(RoutingContextImpl.java:263)
at io.vertx.ext.web.impl.RoutingContextDecorator.getBodyAsJson(RoutingContextDecorator.java:123)
at za.co.offerzen.SortVerticle.doBubbleSort(SortVerticle.java:80)
at io.vertx.ext.web.impl.BlockingHandlerDecorator.lambda$handle$0(BlockingHandlerDecorator.java:48)
at io.vertx.core.impl.ContextImpl.lambda$executeBlocking$2(ContextImpl.java:272)
at io.vertx.core.impl.TaskQueue.run(TaskQueue.java:76)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)
at io.netty.util.concurrent.FastThreadLocalRunnable.run(FastThreadLocalRunnable.java:30)
at java.lang.Thread.run(Thread.java:748)