mirror of
https://github.com/OpenAPITools/openapi-generator.git
synced 2025-12-20 09:17:05 +00:00
[JAVA] java.net.http.HttpClient (java native) form data generator (#14554)
* java native form data generator * merge master; add test * change test * store body echo response * review fixes
This commit is contained in:
@@ -12,9 +12,21 @@ import {{import}};
|
||||
|
||||
import com.fasterxml.jackson.core.type.TypeReference;
|
||||
import com.fasterxml.jackson.databind.ObjectMapper;
|
||||
import org.apache.http.HttpEntity;
|
||||
import org.apache.http.NameValuePair;
|
||||
import org.apache.http.entity.mime.MultipartEntityBuilder;
|
||||
import org.apache.http.message.BasicNameValuePair;
|
||||
import org.apache.http.client.entity.UrlEncodedFormEntity;
|
||||
|
||||
import java.io.IOException;
|
||||
import java.io.InputStream;
|
||||
import java.io.ByteArrayInputStream;
|
||||
import java.io.ByteArrayOutputStream;
|
||||
import java.io.File;
|
||||
import java.io.IOException;
|
||||
import java.io.OutputStream;
|
||||
import java.net.http.HttpRequest;
|
||||
import java.nio.channels.Channels;
|
||||
import java.nio.channels.Pipe;
|
||||
import java.net.URI;
|
||||
import java.net.http.HttpClient;
|
||||
import java.net.http.HttpRequest;
|
||||
@@ -425,7 +437,85 @@ public class {{classname}} {
|
||||
{{/isString}}
|
||||
{{/bodyParam}}
|
||||
{{^bodyParam}}
|
||||
{{#hasFormParams}}
|
||||
{{#isMultipart}}
|
||||
MultipartEntityBuilder multiPartBuilder = MultipartEntityBuilder.create();
|
||||
boolean hasFiles = false;
|
||||
{{#formParams}}
|
||||
{{#isArray}}
|
||||
for (int i=0; i < {{paramName}}.size(); i++) {
|
||||
multiPartBuilder.addTextBody("{{{baseName}}}", {{paramName}}.get(i).toString());
|
||||
}
|
||||
{{/isArray}}
|
||||
{{^isArray}}
|
||||
{{#isFile}}
|
||||
multiPartBuilder.addBinaryBody("{{{baseName}}}", {{paramName}});
|
||||
hasFiles = true;
|
||||
{{/isFile}}
|
||||
{{^isFile}}
|
||||
multiPartBuilder.addTextBody("{{{baseName}}}", {{paramName}}.toString());
|
||||
{{/isFile}}
|
||||
{{/isArray}}
|
||||
{{/formParams}}
|
||||
HttpEntity entity = multiPartBuilder.build();
|
||||
HttpRequest.BodyPublisher formDataPublisher;
|
||||
if (hasFiles) {
|
||||
Pipe pipe;
|
||||
try {
|
||||
pipe = Pipe.open();
|
||||
} catch (IOException e) {
|
||||
throw new RuntimeException(e);
|
||||
}
|
||||
new Thread(() -> {
|
||||
try (OutputStream outputStream = Channels.newOutputStream(pipe.sink())) {
|
||||
entity.writeTo(outputStream);
|
||||
} catch (IOException e) {
|
||||
e.printStackTrace();
|
||||
}
|
||||
}).start();
|
||||
formDataPublisher = HttpRequest.BodyPublishers.ofInputStream(() -> Channels.newInputStream(pipe.source()));
|
||||
} else {
|
||||
ByteArrayOutputStream formOutputStream = new ByteArrayOutputStream();
|
||||
try {
|
||||
entity.writeTo(formOutputStream);
|
||||
} catch (IOException e) {
|
||||
throw new RuntimeException(e);
|
||||
}
|
||||
formDataPublisher = HttpRequest.BodyPublishers
|
||||
.ofInputStream(() -> new ByteArrayInputStream(formOutputStream.toByteArray()));
|
||||
}
|
||||
localVarRequestBuilder
|
||||
.header("Content-Type", entity.getContentType().getValue())
|
||||
.method("{{httpMethod}}", formDataPublisher);
|
||||
{{/isMultipart}}
|
||||
{{^isMultipart}}
|
||||
List<NameValuePair> formValues = new ArrayList<>();
|
||||
{{#formParams}}
|
||||
{{#isArray}}
|
||||
for (int i=0; i < {{paramName}}.size(); i++) {
|
||||
formValues.add(new BasicNameValuePair("{{{baseName}}}", {{paramName}}.get(i).toString()));
|
||||
}
|
||||
{{/isArray}}
|
||||
{{^isArray}}
|
||||
formValues.add(new BasicNameValuePair("{{{baseName}}}", {{paramName}}.toString()));
|
||||
{{/isArray}}
|
||||
{{/formParams}}
|
||||
HttpEntity entity = new UrlEncodedFormEntity(formValues, java.nio.charset.StandardCharsets.UTF_8);
|
||||
ByteArrayOutputStream formOutputStream = new ByteArrayOutputStream();
|
||||
try {
|
||||
entity.writeTo(formOutputStream);
|
||||
} catch (IOException e) {
|
||||
throw new RuntimeException(e);
|
||||
}
|
||||
localVarRequestBuilder
|
||||
.header("Content-Type", entity.getContentType().getValue())
|
||||
.method("{{httpMethod}}", HttpRequest.BodyPublishers
|
||||
.ofInputStream(() -> new ByteArrayInputStream(formOutputStream.toByteArray())));
|
||||
{{/isMultipart}}
|
||||
{{/hasFormParams}}
|
||||
{{^hasFormParams}}
|
||||
localVarRequestBuilder.method("{{httpMethod}}", HttpRequest.BodyPublishers.noBody());
|
||||
{{/hasFormParams}}
|
||||
{{/bodyParam}}
|
||||
if (memberVarReadTimeout != null) {
|
||||
localVarRequestBuilder.timeout(memberVarReadTimeout);
|
||||
|
||||
@@ -68,6 +68,7 @@ ext {
|
||||
jackson_version = "2.14.1"
|
||||
jakarta_annotation_version = "1.3.5"
|
||||
junit_version = "4.13.2"
|
||||
httpmime_version = "4.5.13"
|
||||
}
|
||||
|
||||
dependencies {
|
||||
@@ -81,5 +82,6 @@ dependencies {
|
||||
implementation "com.fasterxml.jackson.datatype:jackson-datatype-jsr310:$jackson_version"
|
||||
implementation "org.openapitools:jackson-databind-nullable:0.2.1"
|
||||
implementation "jakarta.annotation:jakarta.annotation-api:$jakarta_annotation_version"
|
||||
implementation "org.apache.httpcomponents:httpmime:$httpmime_version"
|
||||
testImplementation "junit:junit:$junit_version"
|
||||
}
|
||||
|
||||
@@ -208,6 +208,11 @@
|
||||
<version>${jakarta-annotation-version}</version>
|
||||
<scope>provided</scope>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>org.apache.httpcomponents</groupId>
|
||||
<artifactId>httpmime</artifactId>
|
||||
<version>${httpmime-version}</version>
|
||||
</dependency>
|
||||
|
||||
<!-- test dependencies -->
|
||||
<dependency>
|
||||
@@ -233,6 +238,7 @@
|
||||
{{^useJakartaEe}}
|
||||
<jakarta-annotation-version>1.3.5</jakarta-annotation-version>
|
||||
{{/useJakartaEe}}
|
||||
<httpmime-version>4.5.13</httpmime-version>
|
||||
<junit-version>4.13.2</junit-version>
|
||||
</properties>
|
||||
</project>
|
||||
|
||||
Reference in New Issue
Block a user