Spring HTTP interface with application/x-ndjson
Content-type is not creating a new line delimited JSON in the request body.
@PostExchange(contentType = MediaType.APPLICATION_NDJSON_VALUE)
ResponseEntity<String> upload(@RequestBody Map<String, String>... data);
The request body is generated as
[{\"1\":\"name\",\"2\":\"name\"}]
Mockserver request log
{
"method" : "POST",
"path" : "/",
"headers" : {
"user-agent" : [ "ReactorNetty/1.1.10" ],
"host" : [ "localhost:8787" ],
"content-length" : [ "25" ],
"accept-encoding" : [ "gzip" ],
"accept" : [ "*/*" ],
"Content-Type" : [ "application/x-ndjson" ]
},
"keepAlive" : true,
"secure" : false,
"protocol" : "HTTP_1_1",
"localAddress" : "127.0.0.1:8787",
"remoteAddress" : "127.0.0.1:50897",
"body" : "[{\"1\":\"name\",\"2\":\"name\"}]"
}
https://github.com/shinusuresh/httpinterface-ndjson
Question in SO - https://stackoverflow.com/questions/76976273/spring-http-interface-ndjson-support
Comment From: rstoyanchev
This is unrelated to the HTTP Interface client, and using WebClient
directly should give the same result. NDJSON is a streaming format, and we support that with a Flux
for the request body. I'm not sure what your intent is but a Map
is written as any other single value and there is no streaming involved in that.
Comment From: shinusuresh
Thanks, @rstoyanchev for checking this. I was expecting an input of
Map.of("id", "123")
Map.of("id", "345")
to have a body
{"id": "123"}
{"id": "345"}
May be I misconceive this.
Comment From: rstoyanchev
As ndjson implies a stream, currently we expect a streaming type, e.g. Flux.just(Map.of("id", "123", Map.of("id", "345"))
. I do see the point that from a client perspective you may not have a stream to send, but may be it's the only format the server expects. If you could provide more details on the scenario and constraints that would be helpful?
Note that even if we added more ways to provide ndjson, it would be something like List<?>
where each element is a map or an object, rather than the Map<String, String>
you have in your original code snippet.
Comment From: spring-projects-issues
If you would like us to look at this issue, please provide the requested information. If the information is not provided within the next 7 days this issue will be closed.
Comment From: shinusuresh
Thank you for checking this.
Feel free to close this issue as I was able to achieve it differently than using a varargs of Map
Comment From: sbrannen
Thanks for the feedback, @shinusuresh.
I'll close this issue now.