vert.xvertx-httpclientvert.x-webclient

Vertx Web Client throwing HTTP 415 Unsupported Media Type for Multipart/form-data


This service receives the multipart request from mobile client and passes on the request to downstream service for uploading the image. I am seeing 415 Unsupported Media Type in my downstream service

 private void makeRequest(HttpRequest<Buffer> httpRequest,
                             Promise<Object> future,
                             RequestContext requestContext,
                             RoutingContext routingContext,
                             Entry entry) {
        MultipartForm multipartForm = MultipartForm.create();
        MultiMap attributes = routingContext.request()
                .formAttributes();
        attributes.forEach(attribute -> {
            multipartForm.attribute(attribute.getKey(), attribute.getValue());
        });
        routingContext.fileUploads()
                .forEach(fileUpload -> {
                    multipartForm.binaryFileUpload(fileUpload.name(), fileUpload.fileName(),
                            fileUpload.uploadedFileName(), fileUpload.contentType());
                });

        httpRequest.sendMultipartForm(multipartForm, response -> {
            handleResponse(routingContext, future, response, requestContext, entry);
        });
    }

Getting the below exception

javax.ws.rs.NotSupportedException: HTTP 415 Unsupported Media Type
    at org.glassfish.jersey.server.internal.routing.MethodSelectingRouter.getMethodRouter(MethodSelectingRouter.java:478)
    at org.glassfish.jersey.server.internal.routing.MethodSelectingRouter.access$000(MethodSelectingRouter.java:94)
    at org.glassfish.jersey.server.internal.routing.MethodSelectingRouter$4.apply(MethodSelectingRouter.java:779)
    at org.glassfish.jersey.server.internal.routing.MethodSelectingRouter.apply(MethodSelectingRouter.java:371)

API signature of my downstream service

@POST
    @Timed
    @Path("{userId}/{scope}/upload")
    @Consumes(MediaType.MULTIPART_FORM_DATA)
    @Produces(MediaType.APPLICATION_JSON)
    @ApiOperation("Multipart upload of an image")

Can someone please guide what is wrong in my code snippet or is there any setting which needs to be enabled in vertx server or vertx web client?

Thanks, Nitish Goyal


Solution

  • I was able to resolve this by explicitly setting the header .putHeader("content-type", "multipart/form-data")