mirror of
https://github.com/OpenAPITools/openapi-generator.git
synced 2025-12-19 17:37:05 +00:00
[kotlin-spring] fix BigDecimal default value failed to compile (#17956)
This commit is contained in:
@@ -0,0 +1,13 @@
|
||||
package org.openapitools
|
||||
|
||||
import org.springframework.boot.runApplication
|
||||
import org.springframework.boot.autoconfigure.SpringBootApplication
|
||||
import org.springframework.context.annotation.ComponentScan
|
||||
|
||||
@SpringBootApplication
|
||||
@ComponentScan(basePackages = ["org.openapitools", "org.openapitools.api", "org.openapitools.model"])
|
||||
class Application
|
||||
|
||||
fun main(args: Array<String>) {
|
||||
runApplication<Application>(*args)
|
||||
}
|
||||
@@ -0,0 +1,17 @@
|
||||
package org.openapitools
|
||||
|
||||
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
|
||||
class HomeController {
|
||||
|
||||
@RequestMapping("/")
|
||||
fun index(): String = "redirect:swagger-ui.html"
|
||||
}
|
||||
@@ -0,0 +1,26 @@
|
||||
package org.openapitools
|
||||
|
||||
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
|
||||
class SpringDocConfiguration {
|
||||
|
||||
@Bean
|
||||
fun apiInfo(): OpenAPI {
|
||||
return OpenAPI()
|
||||
.info(
|
||||
Info()
|
||||
.title("Demo")
|
||||
.description("No description provided (generated by Openapi Generator https://github.com/openapitools/openapi-generator)")
|
||||
.version("1.0.0")
|
||||
)
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,19 @@
|
||||
package org.openapitools.api
|
||||
|
||||
import org.springframework.web.context.request.NativeWebRequest
|
||||
|
||||
import javax.servlet.http.HttpServletResponse
|
||||
import java.io.IOException
|
||||
|
||||
object ApiUtil {
|
||||
fun setExampleResponse(req: NativeWebRequest, contentType: String, example: String) {
|
||||
try {
|
||||
val res = req.getNativeResponse(HttpServletResponse::class.java)
|
||||
res?.characterEncoding = "UTF-8"
|
||||
res?.addHeader("Content-Type", contentType)
|
||||
res?.writer?.print(example)
|
||||
} catch (e: IOException) {
|
||||
throw RuntimeException(e)
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,29 @@
|
||||
package org.openapitools.api
|
||||
|
||||
import org.springframework.http.HttpStatus
|
||||
import org.springframework.web.bind.annotation.ControllerAdvice
|
||||
import org.springframework.web.bind.annotation.ExceptionHandler
|
||||
import javax.servlet.http.HttpServletResponse
|
||||
import javax.validation.ConstraintViolationException
|
||||
|
||||
// TODO Extend ApiException for custom exception handling, e.g. the below NotFound exception
|
||||
sealed class ApiException(msg: String, val code: Int) : Exception(msg)
|
||||
|
||||
class NotFoundException(msg: String, code: Int = HttpStatus.NOT_FOUND.value()) : ApiException(msg, code)
|
||||
|
||||
|
||||
@ControllerAdvice
|
||||
class DefaultExceptionHandler {
|
||||
|
||||
@ExceptionHandler(value = [ApiException::class])
|
||||
fun onApiException(ex: ApiException, response: HttpServletResponse): Unit =
|
||||
response.sendError(ex.code, ex.message)
|
||||
|
||||
@ExceptionHandler(value = [NotImplementedError::class])
|
||||
fun onNotImplemented(ex: NotImplementedError, response: HttpServletResponse): Unit =
|
||||
response.sendError(HttpStatus.NOT_IMPLEMENTED.value())
|
||||
|
||||
@ExceptionHandler(value = [ConstraintViolationException::class])
|
||||
fun onConstraintViolation(ex: ConstraintViolationException, response: HttpServletResponse): Unit =
|
||||
response.sendError(HttpStatus.BAD_REQUEST.value(), ex.constraintViolations.joinToString(", ") { it.message })
|
||||
}
|
||||
@@ -0,0 +1,51 @@
|
||||
package org.openapitools.api
|
||||
|
||||
import org.openapitools.model.Apa
|
||||
import io.swagger.v3.oas.annotations.*
|
||||
import io.swagger.v3.oas.annotations.enums.*
|
||||
import io.swagger.v3.oas.annotations.media.*
|
||||
import io.swagger.v3.oas.annotations.responses.*
|
||||
import io.swagger.v3.oas.annotations.security.*
|
||||
import org.springframework.http.HttpStatus
|
||||
import org.springframework.http.MediaType
|
||||
import org.springframework.http.ResponseEntity
|
||||
|
||||
import org.springframework.web.bind.annotation.*
|
||||
import org.springframework.validation.annotation.Validated
|
||||
import org.springframework.web.context.request.NativeWebRequest
|
||||
import org.springframework.beans.factory.annotation.Autowired
|
||||
|
||||
import javax.validation.Valid
|
||||
import javax.validation.constraints.DecimalMax
|
||||
import javax.validation.constraints.DecimalMin
|
||||
import javax.validation.constraints.Email
|
||||
import javax.validation.constraints.Max
|
||||
import javax.validation.constraints.Min
|
||||
import javax.validation.constraints.NotNull
|
||||
import javax.validation.constraints.Pattern
|
||||
import javax.validation.constraints.Size
|
||||
|
||||
import kotlin.collections.List
|
||||
import kotlin.collections.Map
|
||||
|
||||
@RestController
|
||||
@Validated
|
||||
@RequestMapping("\${api.base-path:}")
|
||||
class TestApiController() {
|
||||
|
||||
@Operation(
|
||||
summary = "",
|
||||
operationId = "testPost",
|
||||
description = """""",
|
||||
responses = [
|
||||
ApiResponse(responseCode = "200", description = "Successful operation") ]
|
||||
)
|
||||
@RequestMapping(
|
||||
method = [RequestMethod.POST],
|
||||
value = ["/test"],
|
||||
consumes = ["application/json"]
|
||||
)
|
||||
fun testPost(@Parameter(description = "", required = true) @Valid @RequestBody apa: Apa): ResponseEntity<Unit> {
|
||||
return ResponseEntity(HttpStatus.NOT_IMPLEMENTED)
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,48 @@
|
||||
package org.openapitools.model
|
||||
|
||||
import java.util.Objects
|
||||
import com.fasterxml.jackson.annotation.JsonProperty
|
||||
import javax.validation.constraints.DecimalMax
|
||||
import javax.validation.constraints.DecimalMin
|
||||
import javax.validation.constraints.Email
|
||||
import javax.validation.constraints.Max
|
||||
import javax.validation.constraints.Min
|
||||
import javax.validation.constraints.NotNull
|
||||
import javax.validation.constraints.Pattern
|
||||
import javax.validation.constraints.Size
|
||||
import javax.validation.Valid
|
||||
import io.swagger.v3.oas.annotations.media.Schema
|
||||
|
||||
/**
|
||||
*
|
||||
* @param bepa
|
||||
* @param cepa
|
||||
* @param depa
|
||||
* @param epa
|
||||
* @param fepa
|
||||
* @param gepa
|
||||
*/
|
||||
data class Apa(
|
||||
|
||||
@Schema(example = "null", required = true, description = "")
|
||||
@get:JsonProperty("bepa", required = true) val bepa: java.math.BigDecimal = java.math.BigDecimal("0"),
|
||||
|
||||
@Schema(example = "null", required = true, description = "")
|
||||
@get:JsonProperty("cepa", required = true) val cepa: java.math.BigDecimal = java.math.BigDecimal("6.28318"),
|
||||
|
||||
@Schema(example = "null", description = "")
|
||||
@get:JsonProperty("depa") val depa: java.math.BigDecimal? = java.math.BigDecimal("71"),
|
||||
|
||||
@Schema(example = "null", description = "")
|
||||
@get:JsonProperty("epa") val epa: java.math.BigDecimal? = java.math.BigDecimal("-71"),
|
||||
|
||||
@Schema(example = "null", description = "")
|
||||
@Deprecated(message = "")
|
||||
@get:JsonProperty("fepa") val fepa: java.math.BigDecimal? = java.math.BigDecimal("100"),
|
||||
|
||||
@Schema(example = "null", description = "")
|
||||
@get:JsonProperty("gepa") val gepa: java.math.BigDecimal? = null
|
||||
) {
|
||||
|
||||
}
|
||||
|
||||
@@ -0,0 +1,10 @@
|
||||
spring:
|
||||
application:
|
||||
name: demo
|
||||
|
||||
jackson:
|
||||
serialization:
|
||||
WRITE_DATES_AS_TIMESTAMPS: false
|
||||
|
||||
server:
|
||||
port: 8080
|
||||
@@ -0,0 +1,55 @@
|
||||
openapi: 3.0.0
|
||||
info:
|
||||
title: Demo
|
||||
version: 1.0.0
|
||||
servers:
|
||||
- url: /
|
||||
paths:
|
||||
/test:
|
||||
post:
|
||||
requestBody:
|
||||
content:
|
||||
application/json:
|
||||
schema:
|
||||
$ref: '#/components/schemas/Apa'
|
||||
required: true
|
||||
responses:
|
||||
"200":
|
||||
description: Successful operation
|
||||
components:
|
||||
schemas:
|
||||
Apa:
|
||||
example:
|
||||
epa: 5.962133916683182
|
||||
bepa: 0.8008281904610115
|
||||
depa: 1.4658129805029452
|
||||
cepa: 6.027456183070403
|
||||
fepa: 5.637376656633329
|
||||
gepa: 2.3021358869347655
|
||||
properties:
|
||||
bepa:
|
||||
default: 0
|
||||
format: long
|
||||
type: number
|
||||
cepa:
|
||||
default: 6.28318
|
||||
type: number
|
||||
depa:
|
||||
default: 71
|
||||
type: number
|
||||
epa:
|
||||
default: -71
|
||||
nullable: false
|
||||
type: number
|
||||
fepa:
|
||||
default: 100
|
||||
deprecated: true
|
||||
nullable: true
|
||||
type: number
|
||||
gepa:
|
||||
nullable: true
|
||||
type: number
|
||||
required:
|
||||
- bepa
|
||||
- cepa
|
||||
type: object
|
||||
@@ -0,0 +1,23 @@
|
||||
package org.openapitools.api
|
||||
|
||||
import org.openapitools.model.Apa
|
||||
import org.junit.jupiter.api.Test
|
||||
import org.springframework.http.ResponseEntity
|
||||
|
||||
class TestApiTest {
|
||||
|
||||
private val api: TestApiController = TestApiController()
|
||||
|
||||
/**
|
||||
* To test TestApiController.testPost
|
||||
*
|
||||
* @throws ApiException
|
||||
* if the Api call fails
|
||||
*/
|
||||
@Test
|
||||
fun testPostTest() {
|
||||
// val apa: Apa = TODO()
|
||||
// val response: ResponseEntity<Unit> = api.testPost(apa)
|
||||
// TODO: test validations
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user