forked from loafle/openapi-generator-original
[Spring] replace MultipartFile by Resource (#18509)
* replace MultiPartFile by Resource * fix SpringCodegenTest * new approach: small scoped fix * move to JDK17 workflow * update samples * fix formParams
This commit is contained in:
parent
da7105bc6a
commit
045b6012b3
5
.github/workflows/samples-spring-jdk17.yaml
vendored
5
.github/workflows/samples-spring-jdk17.yaml
vendored
@ -5,12 +5,16 @@ on:
|
|||||||
paths:
|
paths:
|
||||||
- samples/openapi3/client/petstore/spring-cloud-3-with-optional
|
- samples/openapi3/client/petstore/spring-cloud-3-with-optional
|
||||||
- samples/openapi3/server/petstore/springboot-3
|
- samples/openapi3/server/petstore/springboot-3
|
||||||
|
- samples/server/petstore/springboot-lombok-data
|
||||||
|
- samples/server/petstore/springboot-lombok-tostring
|
||||||
|
- samples/server/petstore/springboot-file-delegate-optional
|
||||||
pull_request:
|
pull_request:
|
||||||
paths:
|
paths:
|
||||||
- samples/openapi3/client/petstore/spring-cloud-3-with-optional
|
- samples/openapi3/client/petstore/spring-cloud-3-with-optional
|
||||||
- samples/openapi3/server/petstore/springboot-3
|
- samples/openapi3/server/petstore/springboot-3
|
||||||
- samples/server/petstore/springboot-lombok-data
|
- samples/server/petstore/springboot-lombok-data
|
||||||
- samples/server/petstore/springboot-lombok-tostring
|
- samples/server/petstore/springboot-lombok-tostring
|
||||||
|
- samples/server/petstore/springboot-file-delegate-optional
|
||||||
jobs:
|
jobs:
|
||||||
build:
|
build:
|
||||||
name: Build Java Spring (JDK17)
|
name: Build Java Spring (JDK17)
|
||||||
@ -25,6 +29,7 @@ jobs:
|
|||||||
- samples/openapi3/server/petstore/springboot-3
|
- samples/openapi3/server/petstore/springboot-3
|
||||||
- samples/server/petstore/springboot-lombok-data
|
- samples/server/petstore/springboot-lombok-data
|
||||||
- samples/server/petstore/springboot-lombok-tostring
|
- samples/server/petstore/springboot-lombok-tostring
|
||||||
|
- samples/server/petstore/springboot-file-delegate-optional
|
||||||
steps:
|
steps:
|
||||||
- uses: actions/checkout@v4
|
- uses: actions/checkout@v4
|
||||||
- uses: actions/setup-java@v4
|
- uses: actions/setup-java@v4
|
||||||
|
10
bin/configs/spring-boot-file-delegate-optional.yaml
Normal file
10
bin/configs/spring-boot-file-delegate-optional.yaml
Normal file
@ -0,0 +1,10 @@
|
|||||||
|
generatorName: spring
|
||||||
|
outputDir: samples/server/petstore/springboot-file-delegate-optional
|
||||||
|
inputSpec: modules/openapi-generator/src/test/resources/3_0/issue18345.yaml
|
||||||
|
templateDir: modules/openapi-generator/src/main/resources/JavaSpring
|
||||||
|
additionalProperties:
|
||||||
|
delegatePattern: true
|
||||||
|
useOptional: true
|
||||||
|
useSpringBoot3: true
|
||||||
|
artifactId: spring-boot-use-optional
|
||||||
|
hideGenerationTimestamp: "true"
|
@ -66,7 +66,7 @@ public interface {{classname}}Delegate {
|
|||||||
{{#isDeprecated}}
|
{{#isDeprecated}}
|
||||||
@Deprecated
|
@Deprecated
|
||||||
{{/isDeprecated}}
|
{{/isDeprecated}}
|
||||||
{{#jdk8-default-interface}}default {{/jdk8-default-interface}}{{>responseType}} {{operationId}}({{#allParams}}{{^isFile}}{{^isBodyParam}}{{>optionalDataType}}{{/isBodyParam}}{{#isBodyParam}}{{^reactive}}{{>optionalDataType}}{{/reactive}}{{#reactive}}{{^isArray}}Mono<{{{dataType}}}>{{/isArray}}{{#isArray}}Flux<{{{baseType}}}>{{/isArray}}{{/reactive}}{{/isBodyParam}}{{/isFile}}{{#isFile}}{{#isArray}}List<{{/isArray}}{{#reactive}}Flux<Part>{{/reactive}}{{^reactive}}MultipartFile{{/reactive}}{{#isArray}}>{{/isArray}}{{/isFile}} {{paramName}}{{^-last}},
|
{{#jdk8-default-interface}}default {{/jdk8-default-interface}}{{>responseType}} {{operationId}}({{#allParams}}{{^isFile}}{{^isBodyParam}}{{>optionalDataType}}{{/isBodyParam}}{{#isBodyParam}}{{^reactive}}{{>optionalDataType}}{{/reactive}}{{#reactive}}{{^isArray}}Mono<{{{dataType}}}>{{/isArray}}{{#isArray}}Flux<{{{baseType}}}>{{/isArray}}{{/reactive}}{{/isBodyParam}}{{/isFile}}{{#isFile}}{{#isArray}}List<{{/isArray}}{{#reactive}}Flux<Part>{{/reactive}}{{^reactive}}{{#isFormParam}}MultipartFile{{/isFormParam}}{{^isFormParam}}{{>optionalDataType}}{{/isFormParam}}{{/reactive}}{{#isArray}}>{{/isArray}}{{/isFile}} {{paramName}}{{^-last}},
|
||||||
{{/-last}}{{/allParams}}{{#reactive}}{{#hasParams}},
|
{{/-last}}{{/allParams}}{{#reactive}}{{#hasParams}},
|
||||||
{{/hasParams}}ServerWebExchange exchange{{/reactive}}{{#vendorExtensions.x-spring-paginated}}{{#hasParams}}, {{/hasParams}}{{^hasParams}}{{#reactive}}, {{/reactive}}{{/hasParams}}final Pageable pageable{{/vendorExtensions.x-spring-paginated}}){{#unhandledException}} throws Exception{{/unhandledException}}{{^jdk8-default-interface}};{{/jdk8-default-interface}}{{#jdk8-default-interface}} {
|
{{/hasParams}}ServerWebExchange exchange{{/reactive}}{{#vendorExtensions.x-spring-paginated}}{{#hasParams}}, {{/hasParams}}{{^hasParams}}{{#reactive}}, {{/reactive}}{{/hasParams}}final Pageable pageable{{/vendorExtensions.x-spring-paginated}}){{#unhandledException}} throws Exception{{/unhandledException}}{{^jdk8-default-interface}};{{/jdk8-default-interface}}{{#jdk8-default-interface}} {
|
||||||
{{>methodBody}}
|
{{>methodBody}}
|
||||||
|
@ -0,0 +1,19 @@
|
|||||||
|
openapi: 3.0.3
|
||||||
|
info:
|
||||||
|
title: Issue 18345
|
||||||
|
description: ''
|
||||||
|
version: 1.0.0
|
||||||
|
paths:
|
||||||
|
/dummy:
|
||||||
|
post:
|
||||||
|
description: ''
|
||||||
|
operationId: uploadFile
|
||||||
|
requestBody:
|
||||||
|
content:
|
||||||
|
application/octet-stream:
|
||||||
|
schema:
|
||||||
|
type: string
|
||||||
|
format: binary
|
||||||
|
responses:
|
||||||
|
'200':
|
||||||
|
description: successful operation
|
@ -0,0 +1,23 @@
|
|||||||
|
# OpenAPI Generator Ignore
|
||||||
|
# Generated by openapi-generator https://github.com/openapitools/openapi-generator
|
||||||
|
|
||||||
|
# Use this file to prevent files from being overwritten by the generator.
|
||||||
|
# The patterns follow closely to .gitignore or .dockerignore.
|
||||||
|
|
||||||
|
# As an example, the C# client generator defines ApiClient.cs.
|
||||||
|
# You can make changes and tell OpenAPI Generator to ignore just this file by uncommenting the following line:
|
||||||
|
#ApiClient.cs
|
||||||
|
|
||||||
|
# You can match any string of characters against a directory, file or extension with a single asterisk (*):
|
||||||
|
#foo/*/qux
|
||||||
|
# The above matches foo/bar/qux and foo/baz/qux, but not foo/bar/baz/qux
|
||||||
|
|
||||||
|
# You can recursively match patterns against a directory, file or extension with a double asterisk (**):
|
||||||
|
#foo/**/qux
|
||||||
|
# This matches foo/bar/qux, foo/baz/qux, and foo/bar/baz/qux
|
||||||
|
|
||||||
|
# You can also negate patterns with an exclamation (!).
|
||||||
|
# For example, you can ignore all files in a docs folder with the file extension .md:
|
||||||
|
#docs/*.md
|
||||||
|
# Then explicitly reverse the ignore rule for a single file:
|
||||||
|
#!docs/README.md
|
@ -0,0 +1,12 @@
|
|||||||
|
README.md
|
||||||
|
pom.xml
|
||||||
|
src/main/java/org/openapitools/OpenApiGeneratorApplication.java
|
||||||
|
src/main/java/org/openapitools/RFC3339DateFormat.java
|
||||||
|
src/main/java/org/openapitools/api/ApiUtil.java
|
||||||
|
src/main/java/org/openapitools/api/DummyApi.java
|
||||||
|
src/main/java/org/openapitools/api/DummyApiDelegate.java
|
||||||
|
src/main/java/org/openapitools/configuration/HomeController.java
|
||||||
|
src/main/java/org/openapitools/configuration/SpringDocConfiguration.java
|
||||||
|
src/main/resources/application.properties
|
||||||
|
src/main/resources/openapi.yaml
|
||||||
|
src/test/java/org/openapitools/OpenApiGeneratorApplicationTests.java
|
@ -0,0 +1 @@
|
|||||||
|
7.7.0-SNAPSHOT
|
@ -0,0 +1,21 @@
|
|||||||
|
# OpenAPI generated server
|
||||||
|
|
||||||
|
Spring Boot Server
|
||||||
|
|
||||||
|
## Overview
|
||||||
|
This server was generated by the [OpenAPI Generator](https://openapi-generator.tech) project.
|
||||||
|
By using the [OpenAPI-Spec](https://openapis.org), you can easily generate a server stub.
|
||||||
|
This is an example of building a OpenAPI-enabled server in Java using the SpringBoot framework.
|
||||||
|
|
||||||
|
|
||||||
|
The underlying library integrating OpenAPI to Spring Boot is [springdoc](https://springdoc.org).
|
||||||
|
Springdoc will generate an OpenAPI v3 specification based on the generated Controller and Model classes.
|
||||||
|
The specification is available to download using the following url:
|
||||||
|
http://localhost:8080/v3/api-docs/
|
||||||
|
|
||||||
|
Start your server as a simple java application
|
||||||
|
|
||||||
|
You can view the api documentation in swagger-ui by pointing to
|
||||||
|
http://localhost:8080/swagger-ui.html
|
||||||
|
|
||||||
|
Change default port value in application.properties
|
@ -0,0 +1,97 @@
|
|||||||
|
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
|
||||||
|
<modelVersion>4.0.0</modelVersion>
|
||||||
|
<groupId>org.openapitools</groupId>
|
||||||
|
<artifactId>spring-boot-use-optional</artifactId>
|
||||||
|
<packaging>jar</packaging>
|
||||||
|
<name>spring-boot-use-optional</name>
|
||||||
|
<version>1.0.0</version>
|
||||||
|
<properties>
|
||||||
|
<java.version>17</java.version>
|
||||||
|
<maven.compiler.source>${java.version}</maven.compiler.source>
|
||||||
|
<maven.compiler.target>${java.version}</maven.compiler.target>
|
||||||
|
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
|
||||||
|
<springdoc.version>2.2.0</springdoc.version>
|
||||||
|
<swagger-ui.version>5.3.1</swagger-ui.version>
|
||||||
|
</properties>
|
||||||
|
<parent>
|
||||||
|
<groupId>org.springframework.boot</groupId>
|
||||||
|
<artifactId>spring-boot-starter-parent</artifactId>
|
||||||
|
<version>3.1.3</version>
|
||||||
|
<relativePath/> <!-- lookup parent from repository -->
|
||||||
|
</parent>
|
||||||
|
|
||||||
|
<repositories>
|
||||||
|
<repository>
|
||||||
|
<id>repository.spring.milestone</id>
|
||||||
|
<name>Spring Milestone Repository</name>
|
||||||
|
<url>https://repo.spring.io/milestone</url>
|
||||||
|
</repository>
|
||||||
|
</repositories>
|
||||||
|
<pluginRepositories>
|
||||||
|
<pluginRepository>
|
||||||
|
<id>spring-milestones</id>
|
||||||
|
<url>https://repo.spring.io/milestone</url>
|
||||||
|
</pluginRepository>
|
||||||
|
</pluginRepositories>
|
||||||
|
|
||||||
|
<build>
|
||||||
|
<sourceDirectory>src/main/java</sourceDirectory>
|
||||||
|
<plugins>
|
||||||
|
<plugin>
|
||||||
|
<groupId>org.springframework.boot</groupId>
|
||||||
|
<artifactId>spring-boot-maven-plugin</artifactId>
|
||||||
|
<configuration>
|
||||||
|
</configuration>
|
||||||
|
</plugin>
|
||||||
|
</plugins>
|
||||||
|
</build>
|
||||||
|
<dependencies>
|
||||||
|
<dependency>
|
||||||
|
<groupId>org.springframework.boot</groupId>
|
||||||
|
<artifactId>spring-boot-starter-web</artifactId>
|
||||||
|
</dependency>
|
||||||
|
<dependency>
|
||||||
|
<groupId>org.springframework.data</groupId>
|
||||||
|
<artifactId>spring-data-commons</artifactId>
|
||||||
|
</dependency>
|
||||||
|
<!--SpringDoc dependencies -->
|
||||||
|
<dependency>
|
||||||
|
<groupId>org.springdoc</groupId>
|
||||||
|
<artifactId>springdoc-openapi-starter-webmvc-ui</artifactId>
|
||||||
|
<version>${springdoc.version}</version>
|
||||||
|
</dependency>
|
||||||
|
<!-- @Nullable annotation -->
|
||||||
|
<dependency>
|
||||||
|
<groupId>com.google.code.findbugs</groupId>
|
||||||
|
<artifactId>jsr305</artifactId>
|
||||||
|
<version>3.0.2</version>
|
||||||
|
</dependency>
|
||||||
|
<dependency>
|
||||||
|
<groupId>com.fasterxml.jackson.dataformat</groupId>
|
||||||
|
<artifactId>jackson-dataformat-yaml</artifactId>
|
||||||
|
</dependency>
|
||||||
|
<dependency>
|
||||||
|
<groupId>com.fasterxml.jackson.datatype</groupId>
|
||||||
|
<artifactId>jackson-datatype-jsr310</artifactId>
|
||||||
|
</dependency>
|
||||||
|
<dependency>
|
||||||
|
<groupId>org.openapitools</groupId>
|
||||||
|
<artifactId>jackson-databind-nullable</artifactId>
|
||||||
|
<version>0.2.6</version>
|
||||||
|
</dependency>
|
||||||
|
<!-- Bean Validation API support -->
|
||||||
|
<dependency>
|
||||||
|
<groupId>org.springframework.boot</groupId>
|
||||||
|
<artifactId>spring-boot-starter-validation</artifactId>
|
||||||
|
</dependency>
|
||||||
|
<dependency>
|
||||||
|
<groupId>com.fasterxml.jackson.core</groupId>
|
||||||
|
<artifactId>jackson-databind</artifactId>
|
||||||
|
</dependency>
|
||||||
|
<dependency>
|
||||||
|
<groupId>org.springframework.boot</groupId>
|
||||||
|
<artifactId>spring-boot-starter-test</artifactId>
|
||||||
|
<scope>test</scope>
|
||||||
|
</dependency>
|
||||||
|
</dependencies>
|
||||||
|
</project>
|
@ -0,0 +1,30 @@
|
|||||||
|
package org.openapitools;
|
||||||
|
|
||||||
|
import com.fasterxml.jackson.databind.Module;
|
||||||
|
import org.openapitools.jackson.nullable.JsonNullableModule;
|
||||||
|
import org.springframework.boot.SpringApplication;
|
||||||
|
import org.springframework.boot.autoconfigure.SpringBootApplication;
|
||||||
|
import org.springframework.context.annotation.Bean;
|
||||||
|
import org.springframework.context.annotation.ComponentScan;
|
||||||
|
import org.springframework.context.annotation.FilterType;
|
||||||
|
import org.springframework.context.annotation.FullyQualifiedAnnotationBeanNameGenerator;
|
||||||
|
|
||||||
|
@SpringBootApplication(
|
||||||
|
nameGenerator = FullyQualifiedAnnotationBeanNameGenerator.class
|
||||||
|
)
|
||||||
|
@ComponentScan(
|
||||||
|
basePackages = {"org.openapitools", "org.openapitools.api" , "org.openapitools.configuration"},
|
||||||
|
nameGenerator = FullyQualifiedAnnotationBeanNameGenerator.class
|
||||||
|
)
|
||||||
|
public class OpenApiGeneratorApplication {
|
||||||
|
|
||||||
|
public static void main(String[] args) {
|
||||||
|
SpringApplication.run(OpenApiGeneratorApplication.class, args);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Bean(name = "org.openapitools.OpenApiGeneratorApplication.jsonNullableModule")
|
||||||
|
public Module jsonNullableModule() {
|
||||||
|
return new JsonNullableModule();
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
@ -0,0 +1,38 @@
|
|||||||
|
package org.openapitools;
|
||||||
|
|
||||||
|
import com.fasterxml.jackson.databind.util.StdDateFormat;
|
||||||
|
|
||||||
|
import java.text.DateFormat;
|
||||||
|
import java.text.FieldPosition;
|
||||||
|
import java.text.ParsePosition;
|
||||||
|
import java.util.Date;
|
||||||
|
import java.util.GregorianCalendar;
|
||||||
|
import java.util.TimeZone;
|
||||||
|
|
||||||
|
public class RFC3339DateFormat extends DateFormat {
|
||||||
|
private static final long serialVersionUID = 1L;
|
||||||
|
private static final TimeZone TIMEZONE_Z = TimeZone.getTimeZone("UTC");
|
||||||
|
|
||||||
|
private final StdDateFormat fmt = new StdDateFormat()
|
||||||
|
.withTimeZone(TIMEZONE_Z)
|
||||||
|
.withColonInTimeZone(true);
|
||||||
|
|
||||||
|
public RFC3339DateFormat() {
|
||||||
|
this.calendar = new GregorianCalendar();
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public Date parse(String source, ParsePosition pos) {
|
||||||
|
return fmt.parse(source, pos);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public StringBuffer format(Date date, StringBuffer toAppendTo, FieldPosition fieldPosition) {
|
||||||
|
return fmt.format(date, toAppendTo, fieldPosition);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public Object clone() {
|
||||||
|
return this;
|
||||||
|
}
|
||||||
|
}
|
@ -0,0 +1,19 @@
|
|||||||
|
package org.openapitools.api;
|
||||||
|
|
||||||
|
import org.springframework.web.context.request.NativeWebRequest;
|
||||||
|
|
||||||
|
import jakarta.servlet.http.HttpServletResponse;
|
||||||
|
import java.io.IOException;
|
||||||
|
|
||||||
|
public class ApiUtil {
|
||||||
|
public static void setExampleResponse(NativeWebRequest req, String contentType, String example) {
|
||||||
|
try {
|
||||||
|
HttpServletResponse res = req.getNativeResponse(HttpServletResponse.class);
|
||||||
|
res.setCharacterEncoding("UTF-8");
|
||||||
|
res.addHeader("Content-Type", contentType);
|
||||||
|
res.getWriter().print(example);
|
||||||
|
} catch (IOException e) {
|
||||||
|
throw new RuntimeException(e);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
@ -0,0 +1,66 @@
|
|||||||
|
/**
|
||||||
|
* NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech) (7.7.0-SNAPSHOT).
|
||||||
|
* https://openapi-generator.tech
|
||||||
|
* Do not edit the class manually.
|
||||||
|
*/
|
||||||
|
package org.openapitools.api;
|
||||||
|
|
||||||
|
import io.swagger.v3.oas.annotations.ExternalDocumentation;
|
||||||
|
import io.swagger.v3.oas.annotations.Operation;
|
||||||
|
import io.swagger.v3.oas.annotations.Parameter;
|
||||||
|
import io.swagger.v3.oas.annotations.Parameters;
|
||||||
|
import io.swagger.v3.oas.annotations.media.ArraySchema;
|
||||||
|
import io.swagger.v3.oas.annotations.media.Content;
|
||||||
|
import io.swagger.v3.oas.annotations.media.Schema;
|
||||||
|
import io.swagger.v3.oas.annotations.responses.ApiResponse;
|
||||||
|
import io.swagger.v3.oas.annotations.security.SecurityRequirement;
|
||||||
|
import io.swagger.v3.oas.annotations.tags.Tag;
|
||||||
|
import io.swagger.v3.oas.annotations.enums.ParameterIn;
|
||||||
|
import org.springframework.http.ResponseEntity;
|
||||||
|
import org.springframework.validation.annotation.Validated;
|
||||||
|
import org.springframework.web.bind.annotation.*;
|
||||||
|
import org.springframework.web.multipart.MultipartFile;
|
||||||
|
|
||||||
|
import jakarta.validation.Valid;
|
||||||
|
import jakarta.validation.constraints.*;
|
||||||
|
import java.util.List;
|
||||||
|
import java.util.Map;
|
||||||
|
import java.util.Optional;
|
||||||
|
import jakarta.annotation.Generated;
|
||||||
|
|
||||||
|
@Generated(value = "org.openapitools.codegen.languages.SpringCodegen", comments = "Generator version: 7.7.0-SNAPSHOT")
|
||||||
|
@Validated
|
||||||
|
@Tag(name = "dummy", description = "the dummy API")
|
||||||
|
public interface DummyApi {
|
||||||
|
|
||||||
|
default DummyApiDelegate getDelegate() {
|
||||||
|
return new DummyApiDelegate() {};
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* POST /dummy
|
||||||
|
*
|
||||||
|
*
|
||||||
|
* @param body (optional)
|
||||||
|
* @return successful operation (status code 200)
|
||||||
|
*/
|
||||||
|
@Operation(
|
||||||
|
operationId = "uploadFile",
|
||||||
|
description = "",
|
||||||
|
responses = {
|
||||||
|
@ApiResponse(responseCode = "200", description = "successful operation")
|
||||||
|
}
|
||||||
|
)
|
||||||
|
@RequestMapping(
|
||||||
|
method = RequestMethod.POST,
|
||||||
|
value = "/dummy",
|
||||||
|
consumes = { "application/octet-stream" }
|
||||||
|
)
|
||||||
|
|
||||||
|
default ResponseEntity<Void> uploadFile(
|
||||||
|
@Parameter(name = "body", description = "") @Valid @RequestBody(required = false) Optional<org.springframework.core.io.Resource> body
|
||||||
|
) {
|
||||||
|
return getDelegate().uploadFile(body);
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
@ -0,0 +1,43 @@
|
|||||||
|
package org.openapitools.api;
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
import org.springframework.beans.factory.annotation.Autowired;
|
||||||
|
import org.springframework.http.HttpStatus;
|
||||||
|
import org.springframework.http.MediaType;
|
||||||
|
import org.springframework.http.ResponseEntity;
|
||||||
|
import org.springframework.stereotype.Controller;
|
||||||
|
import org.springframework.web.bind.annotation.PathVariable;
|
||||||
|
import org.springframework.web.bind.annotation.RequestBody;
|
||||||
|
import org.springframework.web.bind.annotation.RequestHeader;
|
||||||
|
import org.springframework.web.bind.annotation.RequestMapping;
|
||||||
|
import org.springframework.web.bind.annotation.CookieValue;
|
||||||
|
import org.springframework.web.bind.annotation.RequestParam;
|
||||||
|
import org.springframework.web.bind.annotation.RequestPart;
|
||||||
|
import org.springframework.web.multipart.MultipartFile;
|
||||||
|
|
||||||
|
import jakarta.validation.constraints.*;
|
||||||
|
import jakarta.validation.Valid;
|
||||||
|
|
||||||
|
import java.util.List;
|
||||||
|
import java.util.Map;
|
||||||
|
import java.util.Optional;
|
||||||
|
import jakarta.annotation.Generated;
|
||||||
|
|
||||||
|
@Generated(value = "org.openapitools.codegen.languages.SpringCodegen", comments = "Generator version: 7.6.0-SNAPSHOT")
|
||||||
|
@Controller
|
||||||
|
@RequestMapping("${openapi.issue18345.base-path:}")
|
||||||
|
public class DummyApiController implements DummyApi {
|
||||||
|
|
||||||
|
private final DummyApiDelegate delegate;
|
||||||
|
|
||||||
|
public DummyApiController(@Autowired(required = false) DummyApiDelegate delegate) {
|
||||||
|
this.delegate = Optional.ofNullable(delegate).orElse(new DummyApiDelegate() {});
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public DummyApiDelegate getDelegate() {
|
||||||
|
return delegate;
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
@ -0,0 +1,40 @@
|
|||||||
|
package org.openapitools.api;
|
||||||
|
|
||||||
|
import org.springframework.http.HttpStatus;
|
||||||
|
import org.springframework.http.MediaType;
|
||||||
|
import org.springframework.http.ResponseEntity;
|
||||||
|
import org.springframework.web.context.request.NativeWebRequest;
|
||||||
|
import org.springframework.web.multipart.MultipartFile;
|
||||||
|
|
||||||
|
import jakarta.validation.constraints.*;
|
||||||
|
import jakarta.validation.Valid;
|
||||||
|
import java.util.List;
|
||||||
|
import java.util.Map;
|
||||||
|
import java.util.Optional;
|
||||||
|
import jakarta.annotation.Generated;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* A delegate to be called by the {@link DummyApiController}}.
|
||||||
|
* Implement this interface with a {@link org.springframework.stereotype.Service} annotated class.
|
||||||
|
*/
|
||||||
|
@Generated(value = "org.openapitools.codegen.languages.SpringCodegen", comments = "Generator version: 7.7.0-SNAPSHOT")
|
||||||
|
public interface DummyApiDelegate {
|
||||||
|
|
||||||
|
default Optional<NativeWebRequest> getRequest() {
|
||||||
|
return Optional.empty();
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* POST /dummy
|
||||||
|
*
|
||||||
|
*
|
||||||
|
* @param body (optional)
|
||||||
|
* @return successful operation (status code 200)
|
||||||
|
* @see DummyApi#uploadFile
|
||||||
|
*/
|
||||||
|
default ResponseEntity<Void> uploadFile(Optional<org.springframework.core.io.Resource> body) {
|
||||||
|
return new ResponseEntity<>(HttpStatus.NOT_IMPLEMENTED);
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
@ -0,0 +1,20 @@
|
|||||||
|
package org.openapitools.configuration;
|
||||||
|
|
||||||
|
import org.springframework.context.annotation.Bean;
|
||||||
|
import org.springframework.stereotype.Controller;
|
||||||
|
import org.springframework.web.bind.annotation.RequestMapping;
|
||||||
|
import org.springframework.web.bind.annotation.ResponseBody;
|
||||||
|
import org.springframework.web.bind.annotation.GetMapping;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Home redirection to OpenAPI api documentation
|
||||||
|
*/
|
||||||
|
@Controller
|
||||||
|
public class HomeController {
|
||||||
|
|
||||||
|
@RequestMapping("/")
|
||||||
|
public String index() {
|
||||||
|
return "redirect:swagger-ui.html";
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
@ -0,0 +1,27 @@
|
|||||||
|
package org.openapitools.configuration;
|
||||||
|
|
||||||
|
import org.springframework.context.annotation.Bean;
|
||||||
|
import org.springframework.context.annotation.Configuration;
|
||||||
|
|
||||||
|
import io.swagger.v3.oas.models.OpenAPI;
|
||||||
|
import io.swagger.v3.oas.models.info.Info;
|
||||||
|
import io.swagger.v3.oas.models.info.Contact;
|
||||||
|
import io.swagger.v3.oas.models.info.License;
|
||||||
|
import io.swagger.v3.oas.models.Components;
|
||||||
|
import io.swagger.v3.oas.models.security.SecurityScheme;
|
||||||
|
|
||||||
|
@Configuration
|
||||||
|
public class SpringDocConfiguration {
|
||||||
|
|
||||||
|
@Bean(name = "org.openapitools.configuration.SpringDocConfiguration.apiInfo")
|
||||||
|
OpenAPI apiInfo() {
|
||||||
|
return new OpenAPI()
|
||||||
|
.info(
|
||||||
|
new Info()
|
||||||
|
.title("Issue 18345")
|
||||||
|
.description("No description provided (generated by Openapi Generator https://github.com/openapitools/openapi-generator)")
|
||||||
|
.version("1.0.0")
|
||||||
|
)
|
||||||
|
;
|
||||||
|
}
|
||||||
|
}
|
@ -0,0 +1,3 @@
|
|||||||
|
server.port=8080
|
||||||
|
spring.jackson.date-format=org.openapitools.RFC3339DateFormat
|
||||||
|
spring.jackson.serialization.WRITE_DATES_AS_TIMESTAMPS=false
|
@ -0,0 +1,26 @@
|
|||||||
|
openapi: 3.0.3
|
||||||
|
info:
|
||||||
|
description: ""
|
||||||
|
title: Issue 18345
|
||||||
|
version: 1.0.0
|
||||||
|
servers:
|
||||||
|
- url: /
|
||||||
|
paths:
|
||||||
|
/dummy:
|
||||||
|
post:
|
||||||
|
description: ""
|
||||||
|
operationId: uploadFile
|
||||||
|
requestBody:
|
||||||
|
content:
|
||||||
|
application/octet-stream:
|
||||||
|
schema:
|
||||||
|
format: binary
|
||||||
|
type: string
|
||||||
|
responses:
|
||||||
|
"200":
|
||||||
|
description: successful operation
|
||||||
|
x-content-type: application/octet-stream
|
||||||
|
x-accepts:
|
||||||
|
- application/json
|
||||||
|
components:
|
||||||
|
schemas: {}
|
@ -0,0 +1,13 @@
|
|||||||
|
package org.openapitools;
|
||||||
|
|
||||||
|
import org.junit.jupiter.api.Test;
|
||||||
|
import org.springframework.boot.test.context.SpringBootTest;
|
||||||
|
|
||||||
|
@SpringBootTest
|
||||||
|
class OpenApiGeneratorApplicationTests {
|
||||||
|
|
||||||
|
@Test
|
||||||
|
void contextLoads() {
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
Loading…
x
Reference in New Issue
Block a user