@@ -15,6 +15,7 @@ import com.papsign.ktor.openapigen.annotations.Response
15
15
import com.papsign.ktor.openapigen.annotations.mapping.OpenAPIName
16
16
import com.papsign.ktor.openapigen.annotations.parameters.HeaderParam
17
17
import com.papsign.ktor.openapigen.annotations.parameters.PathParam
18
+ import com.papsign.ktor.openapigen.annotations.parameters.QueryParam
18
19
import com.papsign.ktor.openapigen.annotations.properties.description.Description
19
20
import com.papsign.ktor.openapigen.annotations.type.`object`.example.ExampleProvider
20
21
import com.papsign.ktor.openapigen.annotations.type.`object`.example.WithExample
@@ -39,22 +40,17 @@ import com.papsign.ktor.openapigen.route.path.normal.post
39
40
import com.papsign.ktor.openapigen.route.response.respond
40
41
import com.papsign.ktor.openapigen.schema.namer.DefaultSchemaNamer
41
42
import com.papsign.ktor.openapigen.schema.namer.SchemaNamer
42
- import io.ktor.application.application
43
- import io.ktor.application.call
44
- import io.ktor.application.install
45
- import io.ktor.features.ContentNegotiation
46
- import io.ktor.features.StatusPages
47
- import io.ktor.features.origin
48
- import io.ktor.http.HttpStatusCode
49
- import io.ktor.jackson.jackson
50
- import io.ktor.request.host
51
- import io.ktor.request.port
52
- import io.ktor.response.respond
53
- import io.ktor.response.respondRedirect
54
- import io.ktor.routing.get
55
- import io.ktor.routing.routing
56
- import io.ktor.server.engine.embeddedServer
57
- import io.ktor.server.netty.Netty
43
+ import io.ktor.application.*
44
+ import io.ktor.features.*
45
+ import io.ktor.http.*
46
+ import io.ktor.jackson.*
47
+ import io.ktor.request.*
48
+ import io.ktor.response.*
49
+ import io.ktor.routing.*
50
+ import io.ktor.server.engine.*
51
+ import io.ktor.server.netty.*
52
+ import java.time.*
53
+ import java.util.*
58
54
import kotlin.reflect.KType
59
55
60
56
object TestServer {
@@ -98,6 +94,9 @@ object TestServer {
98
94
99
95
enable(SerializationFeature .WRAP_EXCEPTIONS , SerializationFeature .INDENT_OUTPUT )
100
96
97
+ disable(SerializationFeature .WRITE_DATES_AS_TIMESTAMPS )
98
+ disable(DeserializationFeature .ADJUST_DATES_TO_CONTEXT_TIME_ZONE )
99
+
101
100
setSerializationInclusion(JsonInclude .Include .NON_NULL )
102
101
103
102
setDefaultPrettyPrinter(DefaultPrettyPrinter ().apply {
@@ -273,6 +272,53 @@ object TestServer {
273
272
}
274
273
}
275
274
}
275
+
276
+
277
+ route(" datetime" ) {
278
+ route(" date" ) {
279
+ get<LocalDateQuery , LocalDateResponse > { params ->
280
+ respond(LocalDateResponse (params.date))
281
+ }
282
+ route(" optional" ) {
283
+ get<LocalDateOptionalQuery , LocalDateResponse > { params ->
284
+ println (params)
285
+ respond(LocalDateResponse (params.date))
286
+ }
287
+ }
288
+ }
289
+ route(" local-time" ) {
290
+ get<LocalTimeQuery , LocalTimeResponse > { params ->
291
+ respond(LocalTimeResponse (params.time))
292
+ }
293
+ }
294
+ route(" offset-time" ) {
295
+ get<OffsetTimeQuery , OffsetTimeResponse > { params ->
296
+ respond(OffsetTimeResponse (params.time))
297
+ }
298
+ }
299
+
300
+ route(" local-date-time" ) {
301
+ get<LocalDateTimeQuery , LocalDateTimeResponse > { params ->
302
+ respond(LocalDateTimeResponse (params.date))
303
+ }
304
+ }
305
+ route(" offset-date-time" ) {
306
+ get<OffsetDateTimeQuery , OffsetDateTimeResponse > { params ->
307
+ respond(OffsetDateTimeResponse (params.date))
308
+ }
309
+ }
310
+ route(" zoned-date-time" ) {
311
+ get<ZonedDateTimeQuery , ZonedDateTimeResponse > { params ->
312
+ println (ZonedDateTime .now())
313
+ respond(ZonedDateTimeResponse (params.date))
314
+ }
315
+ }
316
+ route(" instant" ) {
317
+ get<InstantQuery , InstantResponse > { params ->
318
+ respond(InstantResponse (params.date))
319
+ }
320
+ }
321
+ }
276
322
}
277
323
}.start(true )
278
324
}
@@ -346,4 +392,24 @@ object TestServer {
346
392
}
347
393
348
394
data class APIPrincipal (val a : String , val b : String )
395
+
396
+
397
+ @Request(" A LocalDate Request" )
398
+ data class LocalDateQuery (@QueryParam(" LocalDate" ) val date : LocalDate )
399
+ data class LocalDateOptionalQuery (@QueryParam(" LocalDate" ) val date : LocalDate ? )
400
+ data class LocalDateTimeQuery (@QueryParam(" LocalDateTime" ) val date : LocalDateTime )
401
+ data class OffsetDateTimeQuery (@QueryParam(" OffsetDateTime" ) val date : OffsetDateTime )
402
+ data class ZonedDateTimeQuery (@QueryParam(" OffsetDateTime" ) val date : ZonedDateTime )
403
+ data class InstantQuery (@QueryParam(" Instant" ) val date : Instant )
404
+
405
+ data class LocalTimeQuery (@QueryParam(" LocalTime" ) val time : LocalTime )
406
+ data class OffsetTimeQuery (@QueryParam(" OffsetTime" ) val time : OffsetTime )
407
+
408
+ data class LocalDateResponse (val date : LocalDate ? )
409
+ data class LocalDateTimeResponse (val date : LocalDateTime ? )
410
+ data class OffsetDateTimeResponse (val date : OffsetDateTime ? )
411
+ data class ZonedDateTimeResponse (val date : ZonedDateTime ? )
412
+ data class InstantResponse (val instant : Instant )
413
+ data class LocalTimeResponse (val time : LocalTime ? )
414
+ data class OffsetTimeResponse (val time : OffsetTime ? )
349
415
}
0 commit comments