Skip to content

Commit b44ba66

Browse files
authored
adding support for @ResponseStatus annotation into spring-http-interface java spring generator (#20071)
* adding support for useResponseEntity into spring-http-interface java spring generator * adding samples for @StatusResponse into spring-http-interface java spring generator * additional changes to sample additional changes to samples jdk17 * adding sample files * extra adjustments * fixing generator version * fixing status code in samples * some rollback * some rollback 2
1 parent d7a23a9 commit b44ba66

File tree

128 files changed

+18677
-2
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

128 files changed

+18677
-2
lines changed

.github/workflows/samples-jdk17.yaml

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,8 @@ on:
88
- samples/client/petstore/java-helidon-client/v3/se/**
99
- samples/client/petstore/spring-http-interface-reactive/**
1010
- samples/client/petstore/spring-http-interface/**
11+
- samples/client/petstore/spring-http-interface-reactive-noResponseEntity/**
12+
- samples/client/petstore/spring-http-interface-noResponseEntity/**
1113
- samples/client/petstore/java/webclient-jakarta/**
1214
- samples/client/petstore/java/microprofile-rest-client-outer-enum/**
1315
# servers
@@ -23,6 +25,8 @@ on:
2325
- samples/client/petstore/java-helidon-client/v3/se/**
2426
- samples/client/petstore/spring-http-interface-reactive/**
2527
- samples/client/petstore/spring-http-interface/**
28+
- samples/client/petstore/spring-http-interface-reactive-noResponseEntity/**
29+
- samples/client/petstore/spring-http-interface-noResponseEntity/**
2630
- samples/client/petstore/java/webclient-jakarta/**
2731
- samples/client/petstore/java/microprofile-rest-client-outer-enum/**
2832
# servers
@@ -44,15 +48,15 @@ jobs:
4448
- samples/client/petstore/java-helidon-client/v3/se
4549
- samples/client/petstore/spring-http-interface-reactive
4650
- samples/client/petstore/spring-http-interface
51+
- samples/client/petstore/spring-http-interface-reactive-noResponseEntity
52+
- samples/client/petstore/spring-http-interface-noResponseEntity
4753
- samples/client/petstore/java/webclient-jakarta
4854
- samples/client/petstore/java/microprofile-rest-client-outer-enum
4955
# servers
5056
- samples/openapi3/server/petstore/springboot-3
5157
- samples/server/petstore/java-camel/
5258
- samples/server/petstore/java-helidon-server/v3/mp/
5359
- samples/server/petstore/java-helidon-server/v3/se
54-
- samples/client/petstore/spring-http-interface-reactive
55-
- samples/client/petstore/spring-http-interface
5660
steps:
5761
- uses: actions/checkout@v4
5862
- uses: actions/setup-java@v4
Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,19 @@
1+
generatorName: spring
2+
library: spring-http-interface
3+
outputDir: samples/client/petstore/spring-http-interface-noResponseEntity
4+
inputSpec: modules/openapi-generator/src/test/resources/3_0/spring/petstore-with-fake-endpoints-models-for-testing.yaml
5+
templateDir: modules/openapi-generator/src/main/resources/JavaSpring
6+
additionalProperties:
7+
artifactId: spring-http-interface-noResponseEntity
8+
snapshotVersion: "true"
9+
hideGenerationTimestamp: "true"
10+
modelNameSuffix: 'Dto'
11+
generatedConstructorWithRequiredArgs: "false"
12+
# documentation provider should be ignored
13+
documentationProvider: "springdoc"
14+
# annotation provider should be ignored
15+
annotationLibrary: "swagger2"
16+
# validation should be ignored
17+
useBeanValidation: "true"
18+
performBeanValidation: "true"
19+
useResponseEntity: "false"
Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,19 @@
1+
generatorName: spring
2+
library: spring-http-interface
3+
outputDir: samples/client/petstore/spring-http-interface-reactive-noResponseEntity
4+
inputSpec: modules/openapi-generator/src/test/resources/3_0/spring/petstore-with-fake-endpoints-models-for-testing.yaml
5+
templateDir: modules/openapi-generator/src/main/resources/JavaSpring
6+
additionalProperties:
7+
artifactId: spring-http-interface-reactive-noResponseEntity
8+
snapshotVersion: "true"
9+
hideGenerationTimestamp: "true"
10+
reactive: "true"
11+
# documentation provider should be ignored
12+
documentationProvider: "springfox"
13+
# annotation provider should be ignored
14+
annotationLibrary: "swagger1"
15+
# validation should be ignored
16+
useBeanValidation: "true"
17+
performBeanValidation: "true"
18+
useResponseEntity: "false"
19+

modules/openapi-generator/src/main/resources/JavaSpring/libraries/spring-http-interface/api.mustache

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,12 @@ package {{package}};
77

88
{{#imports}}import {{import}};
99
{{/imports}}
10+
{{^useResponseEntity}}
11+
import org.springframework.http.HttpStatus;
12+
{{/useResponseEntity}}
13+
{{#useResponseEntity}}
1014
import org.springframework.http.ResponseEntity;
15+
{{/useResponseEntity}}
1116
import org.springframework.web.bind.annotation.*;
1217
import org.springframework.web.service.annotation.*;
1318
import org.springframework.web.multipart.MultipartFile;
@@ -51,6 +56,9 @@ public interface {{classname}} {
5156
{{#isDeprecated}}
5257
@Deprecated
5358
{{/isDeprecated}}
59+
{{^useResponseEntity}}
60+
@ResponseStatus({{#springHttpStatus}}{{#responses.0}}{{{code}}}{{/responses.0}}{{/springHttpStatus}})
61+
{{/useResponseEntity}}
5462
@HttpExchange(
5563
method = "{{{httpMethod}}}",
5664
value = "{{{path}}}",
Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,23 @@
1+
# OpenAPI Generator Ignore
2+
# Generated by openapi-generator https://github.com/openapitools/openapi-generator
3+
4+
# Use this file to prevent files from being overwritten by the generator.
5+
# The patterns follow closely to .gitignore or .dockerignore.
6+
7+
# As an example, the C# client generator defines ApiClient.cs.
8+
# You can make changes and tell OpenAPI Generator to ignore just this file by uncommenting the following line:
9+
#ApiClient.cs
10+
11+
# You can match any string of characters against a directory, file or extension with a single asterisk (*):
12+
#foo/*/qux
13+
# The above matches foo/bar/qux and foo/baz/qux, but not foo/bar/baz/qux
14+
15+
# You can recursively match patterns against a directory, file or extension with a double asterisk (**):
16+
#foo/**/qux
17+
# This matches foo/bar/qux, foo/baz/qux, and foo/bar/baz/qux
18+
19+
# You can also negate patterns with an exclamation (!).
20+
# For example, you can ignore all files in a docs folder with the file extension .md:
21+
#docs/*.md
22+
# Then explicitly reverse the ignore rule for a single file:
23+
#!docs/README.md
Lines changed: 59 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,59 @@
1+
README.md
2+
pom.xml
3+
src/main/java/org/openapitools/api/AnotherFakeApi.java
4+
src/main/java/org/openapitools/api/FakeApi.java
5+
src/main/java/org/openapitools/api/FakeClassnameTags123Api.java
6+
src/main/java/org/openapitools/api/PetApi.java
7+
src/main/java/org/openapitools/api/StoreApi.java
8+
src/main/java/org/openapitools/api/UserApi.java
9+
src/main/java/org/openapitools/configuration/HttpInterfacesAbstractConfigurator.java
10+
src/main/java/org/openapitools/model/AdditionalPropertiesAnyTypeDto.java
11+
src/main/java/org/openapitools/model/AdditionalPropertiesArrayDto.java
12+
src/main/java/org/openapitools/model/AdditionalPropertiesBooleanDto.java
13+
src/main/java/org/openapitools/model/AdditionalPropertiesClassDto.java
14+
src/main/java/org/openapitools/model/AdditionalPropertiesIntegerDto.java
15+
src/main/java/org/openapitools/model/AdditionalPropertiesNumberDto.java
16+
src/main/java/org/openapitools/model/AdditionalPropertiesObjectDto.java
17+
src/main/java/org/openapitools/model/AdditionalPropertiesStringDto.java
18+
src/main/java/org/openapitools/model/AnimalDto.java
19+
src/main/java/org/openapitools/model/ApiResponseDto.java
20+
src/main/java/org/openapitools/model/ArrayOfArrayOfNumberOnlyDto.java
21+
src/main/java/org/openapitools/model/ArrayOfNumberOnlyDto.java
22+
src/main/java/org/openapitools/model/ArrayTestDto.java
23+
src/main/java/org/openapitools/model/BigCatDto.java
24+
src/main/java/org/openapitools/model/CapitalizationDto.java
25+
src/main/java/org/openapitools/model/CatDto.java
26+
src/main/java/org/openapitools/model/CategoryDto.java
27+
src/main/java/org/openapitools/model/ChildWithNullableDto.java
28+
src/main/java/org/openapitools/model/ClassModelDto.java
29+
src/main/java/org/openapitools/model/ClientDto.java
30+
src/main/java/org/openapitools/model/ContainerDefaultValueDto.java
31+
src/main/java/org/openapitools/model/DogDto.java
32+
src/main/java/org/openapitools/model/EnumArraysDto.java
33+
src/main/java/org/openapitools/model/EnumClassDto.java
34+
src/main/java/org/openapitools/model/EnumTestDto.java
35+
src/main/java/org/openapitools/model/FileDto.java
36+
src/main/java/org/openapitools/model/FileSchemaTestClassDto.java
37+
src/main/java/org/openapitools/model/FormatTestDto.java
38+
src/main/java/org/openapitools/model/HasOnlyReadOnlyDto.java
39+
src/main/java/org/openapitools/model/ListDto.java
40+
src/main/java/org/openapitools/model/MapTestDto.java
41+
src/main/java/org/openapitools/model/MixedPropertiesAndAdditionalPropertiesClassDto.java
42+
src/main/java/org/openapitools/model/Model200ResponseDto.java
43+
src/main/java/org/openapitools/model/NameDto.java
44+
src/main/java/org/openapitools/model/NullableMapPropertyDto.java
45+
src/main/java/org/openapitools/model/NumberOnlyDto.java
46+
src/main/java/org/openapitools/model/OrderDto.java
47+
src/main/java/org/openapitools/model/OuterCompositeDto.java
48+
src/main/java/org/openapitools/model/OuterEnumDto.java
49+
src/main/java/org/openapitools/model/ParentWithNullableDto.java
50+
src/main/java/org/openapitools/model/PetDto.java
51+
src/main/java/org/openapitools/model/ReadOnlyFirstDto.java
52+
src/main/java/org/openapitools/model/ResponseObjectWithDifferentFieldNamesDto.java
53+
src/main/java/org/openapitools/model/ReturnDto.java
54+
src/main/java/org/openapitools/model/SpecialModelNameDto.java
55+
src/main/java/org/openapitools/model/TagDto.java
56+
src/main/java/org/openapitools/model/TypeHolderDefaultDto.java
57+
src/main/java/org/openapitools/model/TypeHolderExampleDto.java
58+
src/main/java/org/openapitools/model/UserDto.java
59+
src/main/java/org/openapitools/model/XmlItemDto.java
Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
7.10.0-SNAPSHOT
Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,21 @@
1+
# OpenAPI generated API stub
2+
3+
[Spring Framework 6 HTTP Interface](https://docs.spring.io/spring-framework/docs/6.0.0/reference/html/integration.html#rest-http-interface)
4+
5+
6+
## Overview
7+
This code was generated by the [OpenAPI Generator](https://openapi-generator.tech) project.
8+
By using the [OpenAPI-Spec](https://openapis.org), you can easily generate an API stub.
9+
This is an example of building API stub interfaces in Java using the Spring framework.
10+
11+
The stubs generated can be used in your existing Spring application for HTTP integration with other REST services
12+
To use auto-generated interfaces you have to create your own configuration which extends default abstract configurator & provide `WebClient` instance via constructor
13+
```java
14+
@Configuration
15+
public class MyConfiguration extends org.openapitools.configuration.HttpInterfacesAbstractConfigurator {
16+
17+
public MyConfiguration(WebClient myWebClient) { // separately created WebClient instance
18+
super(myWebClient);
19+
}
20+
}
21+
```
Lines changed: 76 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,76 @@
1+
<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">
2+
<modelVersion>4.0.0</modelVersion>
3+
<groupId>org.openapitools</groupId>
4+
<artifactId>spring-http-interface-noResponseEntity</artifactId>
5+
<packaging>jar</packaging>
6+
<name>spring-http-interface-noResponseEntity</name>
7+
<version>1.0.0-SNAPSHOT</version>
8+
<properties>
9+
<java.version>17</java.version>
10+
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
11+
</properties>
12+
<parent>
13+
<groupId>org.springframework.boot</groupId>
14+
<artifactId>spring-boot-starter-parent</artifactId>
15+
<version>3.1.3</version>
16+
<relativePath/> <!-- lookup parent from repository -->
17+
</parent>
18+
19+
<build>
20+
<plugins>
21+
<plugin>
22+
<groupId>org.apache.maven.plugins</groupId>
23+
<artifactId>maven-compiler-plugin</artifactId>
24+
<version>3.8.1</version>
25+
<configuration>
26+
<source>${java.version}</source>
27+
<target>${java.version}</target>
28+
</configuration>
29+
</plugin>
30+
<plugin>
31+
<groupId>org.apache.maven.plugins</groupId>
32+
<artifactId>maven-source-plugin</artifactId>
33+
<version>3.2.1</version>
34+
<executions>
35+
<execution>
36+
<id>attach-sources</id>
37+
<goals>
38+
<goal>jar-no-fork</goal>
39+
</goals>
40+
</execution>
41+
</executions>
42+
</plugin>
43+
</plugins>
44+
</build>
45+
46+
<dependencies>
47+
<dependency>
48+
<groupId>org.springframework.boot</groupId>
49+
<artifactId>spring-boot-starter-webflux</artifactId>
50+
</dependency>
51+
<!-- @Nullable annotation -->
52+
<dependency>
53+
<groupId>com.google.code.findbugs</groupId>
54+
<artifactId>jsr305</artifactId>
55+
<version>3.0.2</version>
56+
</dependency>
57+
<dependency>
58+
<groupId>jakarta.validation</groupId>
59+
<artifactId>jakarta.validation-api</artifactId>
60+
</dependency>
61+
<dependency>
62+
<groupId>com.fasterxml.jackson.datatype</groupId>
63+
<artifactId>jackson-datatype-jsr310</artifactId>
64+
</dependency>
65+
<dependency>
66+
<groupId>org.openapitools</groupId>
67+
<artifactId>jackson-databind-nullable</artifactId>
68+
<version>0.2.6</version>
69+
</dependency>
70+
<dependency>
71+
<groupId>org.springframework.boot</groupId>
72+
<artifactId>spring-boot-starter-test</artifactId>
73+
<scope>test</scope>
74+
</dependency>
75+
</dependencies>
76+
</project>
Lines changed: 41 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,41 @@
1+
/**
2+
* NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech) (7.10.0-SNAPSHOT).
3+
* https://openapi-generator.tech
4+
* Do not edit the class manually.
5+
*/
6+
package org.openapitools.api;
7+
8+
import org.openapitools.model.ClientDto;
9+
import org.springframework.http.HttpStatus;
10+
import org.springframework.web.bind.annotation.*;
11+
import org.springframework.web.service.annotation.*;
12+
import org.springframework.web.multipart.MultipartFile;
13+
14+
import java.util.List;
15+
import java.util.Map;
16+
import java.util.Optional;
17+
import jakarta.annotation.Generated;
18+
19+
20+
@Generated(value = "org.openapitools.codegen.languages.SpringCodegen", comments = "Generator version: 7.10.0-SNAPSHOT")
21+
public interface AnotherFakeApi {
22+
23+
/**
24+
* PATCH /another-fake/dummy : To test special tags
25+
* To test special tags and operation ID starting with number
26+
*
27+
* @param clientDto client model (required)
28+
* @return successful operation (status code 200)
29+
*/
30+
@ResponseStatus(HttpStatus.OK)
31+
@HttpExchange(
32+
method = "PATCH",
33+
value = "/another-fake/dummy",
34+
accept = { "application/json" },
35+
contentType = "application/json"
36+
)
37+
ClientDto call123testSpecialTags(
38+
@RequestBody ClientDto clientDto
39+
);
40+
41+
}

0 commit comments

Comments
 (0)