Skip to content

Commit 06863bf

Browse files
authored
Merge pull request #952 from swagger-api/codegen-issue-4113
added formatter to fix issue with date parameters
2 parents 261c90d + b5306d9 commit 06863bf

File tree

6 files changed

+88
-3
lines changed

6 files changed

+88
-3
lines changed

src/main/java/io/swagger/codegen/v3/generators/java/SpringCodegen.java

Lines changed: 9 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -57,6 +57,8 @@ public class SpringCodegen extends AbstractJavaCodegen implements BeanValidation
5757
public static final String DEFAULT_INTERFACES = "defaultInterfaces";
5858
public static final String SPRING_BOOT_VERSION = "springBootVersion";
5959
public static final String SPRING_BOOT_VERSION_2 = "springBootV2";
60+
public static final String DATE_PATTERN = "datePattern";
61+
public static final String DATE_TIME_PATTERN = "dateTimePattern";
6062

6163
public static final String THROWS_EXCEPTION = "throwsException";
6264

@@ -113,6 +115,8 @@ public SpringCodegen() {
113115
cliOptions.add(CliOption.newBoolean(TARGET_OPENFEIGN,"Generate for usage with OpenFeign (instead of feign)"));
114116
cliOptions.add(CliOption.newBoolean(DEFAULT_INTERFACES, "Generate default implementations for interfaces").defaultValue("true"));
115117
cliOptions.add(CliOption.newBoolean(THROWS_EXCEPTION, "Throws Exception in operation methods").defaultValue("false"));
118+
cliOptions.add(CliOption.newBoolean(DATE_PATTERN, "use pattern for date parameters").defaultValue("true"));
119+
cliOptions.add(CliOption.newBoolean(DATE_TIME_PATTERN, "use pattern for date time parameters").defaultValue("true"));
116120

117121
supportedLibraries.put(DEFAULT_LIBRARY, "Spring-boot Server application using the SpringFox integration.");
118122
supportedLibraries.put(SPRING_MVC_LIBRARY, "Spring-MVC Server application using the SpringFox integration.");
@@ -193,7 +197,7 @@ public void processOpts() {
193197
}
194198

195199
additionalProperties.put("isJava8or11", this.java8 || this.java11);
196-
this.defaultInterfaces = !(this.java8 || this.java11);
200+
this.defaultInterfaces = this.java8 || this.java11;
197201

198202
// set invokerPackage as basePackage
199203
if (additionalProperties.containsKey(CodegenConstants.INVOKER_PACKAGE)) {
@@ -375,6 +379,10 @@ public void processOpts() {
375379
(sourceFolder + File.separator + apiPackage).replace(".", java.io.File.separator), "ApiOriginFilter.java"));
376380
supportingFiles.add(new SupportingFile("swaggerDocumentationConfig.mustache",
377381
(sourceFolder + File.separator + configPackage).replace(".", java.io.File.separator), "SwaggerDocumentationConfig.java"));
382+
supportingFiles.add(new SupportingFile("LocalDateConverter.mustache",
383+
(sourceFolder + File.separator + configPackage).replace(".", java.io.File.separator), "LocalDateConverter.java"));
384+
supportingFiles.add(new SupportingFile("LocalDateTimeConverter.mustache",
385+
(sourceFolder + File.separator + configPackage).replace(".", java.io.File.separator), "LocalDateTimeConverter.java"));
378386
}
379387
} else if ( this.swaggerDocketConfig && !isSpringCloudLibrary()) {
380388
supportingFiles.add(new SupportingFile("swaggerDocumentationConfig.mustache",
Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,27 @@
1+
package {{configPackage}};
2+
3+
import org.springframework.core.convert.converter.Converter;
4+
{{^isJava8or11}}
5+
import org.threeten.bp.LocalDate;
6+
import org.threeten.bp.format.DateTimeFormatter;
7+
{{/isJava8or11}}
8+
{{#isJava8or11}}
9+
import java.time.LocalDate;
10+
import java.time.format.DateTimeFormatter;
11+
{{/isJava8or11}}
12+
13+
public class LocalDateConverter implements Converter<String, LocalDate> {
14+
private final DateTimeFormatter formatter;
15+
16+
public LocalDateConverter(String dateFormat) {
17+
this.formatter = DateTimeFormatter.ofPattern(dateFormat);
18+
}
19+
20+
@Override
21+
public LocalDate convert(String source) {
22+
if(source == null || source.isEmpty()) {
23+
return null;
24+
}
25+
return LocalDate.parse(source, this.formatter);
26+
}
27+
}
Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,27 @@
1+
package {{configPackage}};
2+
3+
import org.springframework.core.convert.converter.Converter;
4+
{{^isJava8or11}}
5+
import org.threeten.bp.LocalDateTime;
6+
import org.threeten.bp.format.DateTimeFormatter;
7+
{{/isJava8or11}}
8+
{{#isJava8or11}}
9+
import java.time.LocalDateTime;
10+
import java.time.format.DateTimeFormatter;
11+
{{/isJava8or11}}
12+
13+
public class LocalDateTimeConverter implements Converter<String, LocalDateTime> {
14+
private final DateTimeFormatter formatter;
15+
16+
public LocalDateTimeConverter(String dateFormat) {
17+
this.formatter = DateTimeFormatter.ofPattern(dateFormat);
18+
}
19+
20+
@Override
21+
public LocalDateTime convert(String source) {
22+
if(source == null || source.isEmpty()) {
23+
return null;
24+
}
25+
return LocalDateTime.parse(source, this.formatter);
26+
}
27+
}

src/main/resources/handlebars/JavaSpring/libraries/spring-boot/pom.mustache

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -121,13 +121,13 @@
121121
</dependency>
122122

123123
{{/withXml}}
124-
{{#java8}}
124+
{{#isJava8or11}}
125125

126126
<dependency>
127127
<groupId>com.fasterxml.jackson.datatype</groupId>
128128
<artifactId>jackson-datatype-jsr310</artifactId>
129129
</dependency>
130-
{{/java8}}
130+
{{/isJava8or11}}
131131
{{#joda}}
132132

133133
<dependency>

src/main/resources/handlebars/JavaSpring/libraries/spring-boot/swagger2SpringBoot.mustache

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,8 @@
11
package {{basePackage}};
22

3+
import {{configPackage}}.LocalDateConverter;
4+
import {{configPackage}}.LocalDateTimeConverter;
5+
36
import org.springframework.boot.CommandLineRunner;
47
import org.springframework.boot.ExitCodeGenerator;
58
import org.springframework.boot.SpringApplication;
@@ -13,6 +16,10 @@ import springfox.documentation.swagger2.annotations.EnableSwagger2;
1316
import springfox.documentation.oas.annotations.EnableOpenApi;
1417
{{/useOas2}}
1518

19+
import org.springframework.context.annotation.Configuration;
20+
import org.springframework.format.FormatterRegistry;
21+
import org.springframework.web.servlet.config.annotation.WebMvcConfigurerAdapter;
22+
1623
@SpringBootApplication
1724
{{#useOas2}}
1825
@EnableSwagger2
@@ -34,6 +41,15 @@ public class Swagger2SpringBoot implements CommandLineRunner {
3441
new SpringApplication(Swagger2SpringBoot.class).run(args);
3542
}
3643

44+
@Configuration
45+
static class CustomDateConfig extends WebMvcConfigurerAdapter {
46+
@Override
47+
public void addFormatters(FormatterRegistry registry) {
48+
registry.addConverter(new LocalDateConverter("{{#datePattern}}{{datePattern}}{{/datePattern}}{{^datePattern}}yyyy-MM-dd{{/datePattern}}"));
49+
registry.addConverter(new LocalDateTimeConverter("{{#dateTimePattern}}{{dateTimePattern}}{{/dateTimePattern}}{{^dateTimePattern}}yyyy-MM-dd'T'HH:mm:ss.SSS{{/dateTimePattern}}"));
50+
}
51+
}
52+
3753
class ExitException extends RuntimeException implements ExitCodeGenerator {
3854
private static final long serialVersionUID = 1L;
3955

src/main/resources/handlebars/JavaSpring/libraries/spring-mvc/swaggerUiConfiguration.mustache

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,7 @@ import org.springframework.context.annotation.Configuration;
1010
import org.springframework.context.annotation.PropertySource;
1111
import org.springframework.context.annotation.Import;
1212
import org.springframework.context.annotation.Bean;
13+
import org.springframework.format.FormatterRegistry;
1314
import org.springframework.http.converter.HttpMessageConverter;
1415
import org.springframework.http.converter.json.Jackson2ObjectMapperBuilder;
1516
import org.springframework.http.converter.json.MappingJackson2HttpMessageConverter;
@@ -92,6 +93,12 @@ public class SwaggerUiConfiguration extends WebMvcConfigurerAdapter {
9293
super.configureMessageConverters(converters);
9394
}
9495

96+
@Override
97+
public void addFormatters(FormatterRegistry registry) {
98+
registry.addConverter(new LocalDateConverter("{{#datePattern}}{{datePattern}}{{/datePattern}}{{^datePattern}}yyyy-MM-dd{{/datePattern}}"));
99+
registry.addConverter(new LocalDateTimeConverter("{{#dateTimePattern}}{{dateTimePattern}}{{/dateTimePattern}}{{^dateTimePattern}}yyyy-MM-dd'T'HH:mm:ss.SSS{{/dateTimePattern}}"));
100+
}
101+
95102
@Bean
96103
public ObjectMapper objectMapper(){
97104
return builder().build();

0 commit comments

Comments
 (0)