OpenAPITools / OpenAPITools/openapi-generator
[BUG][Spring] generator not escaping backslashes
Nobody has claimed this yet.
- Dominant language
- Java
- Stars
- 26.8k
- Forks
- 7.7k
- PR merge metrics
- PR metrics pending
Description
Description
Trying to generate Java code from the Vimeo OpenAPI spec.
That spec (api.yaml) uses backslashes in some of the strings (e.g. tag definitions).
Using the openapi gradle plugin 3.3.4 the generator 'spring' with any of it libraries (spring-boot, spring-mvc, spring-cloud) generates code which does not escape backslashes properly.
openapi-generator version
3.3.4
OpenAPI declaration file content or url
{
"generatorName": "spring",
"library": "spring-boot",
"groupId": "com.vimeo",
"modelPackage": "com.vimeo.model",
"apiPackage": "com.vimeo.api",
"invokerPackage": "com.vimeo",
"basePackage": "com.vimeo",
"dateLibrary": "java8",
"java8": true,
"async": true,
"responseWrapper": "ListenableFuture",
"useBeanValidation": true
}
Command line used for generation
As this is a gradle project the command line is just
./gradlew clean openApiGenerate
but I'd assume the same code is generated when using the generator lib directly.
- Language: Java 11
- Gradle: 4.9
- Libraries: Spring Boot 2.1 family
Steps to reproduce
- create a new Spring Boot basic project (e.g. via http://start.spring.io/ in Java and Gradle flavour
- add the Gradle OpenAPI plugin to build.gradle like this
buildscript {
repositories {
mavenCentral()
}
dependencies {
classpath "org.openapitools:openapi-generator-gradle-plugin:3.3.4"
}
}
apply plugin: 'org.openapi.generator'
- add a new openapi configuration file config.json
- download the api.yaml from above Vimeo GitHub repo
- add a openapi statement to the build.gradle like this (the folders might differ)
openApiGenerate {
validateSpec = true
configFile = "$rootDir/vimeo/config.json".toString()
inputSpec = "$rootDir/vimeo/openapi/api.yaml".toString()
outputDir = "$buildDir/generated".toString()
}
- run
./gradlew clean openApiGenerate - open one of the generated java files, e.g. LanguagesAPI
- check the tags annotation
tags={ "Videos\Languages", })
---> the backslash is not escaoped, leading to compile errors
Suggest a fix
- it looks like a bug with the generator templates, as it works proper for other generators (like feign for Java). Fixing the template should fix the issue.
Contributor guide
First steps
- Read the whole issue, then the project's contributing guide.
- Comment on the issue to say you are picking it up — it saves two people doing the same work.
- Fork the repository and make your change on a branch.
- Open a pull request that references the issue number.
Research direction
Start with config.json, build.gradle, and the Vimeo api.yaml, then run ./gradlew clean openApiGenerate. Inspect the Spring generator templates and the generated LanguagesAPI tags annotation, comparing it with the working Java Feign output. Done means backslashes in generated Java are escaped so the output compiles.
Written by the indexing model from the issue text.
Assessment
- Tech stack
- java, openapi, spring, spring-boot
- Domain
- backend, tooling
- Issue type
- Bug
- Difficulty
- 3/5
- Estimated time
- 1-2 days
- Activity status
- Stale
- Clarity
- Mostly clear
- Newbie friendliness
- 35/100