diff --git a/pom.xml b/pom.xml index 8cf7bd35d528e6fb354b1229bb1a0f8f25d7768d..00ff76fa41304abd8fb88f512011543fc517977a 100644 --- a/pom.xml +++ b/pom.xml @@ -199,7 +199,7 @@ <plugin> <groupId>org.openapitools</groupId> <artifactId>openapi-generator-maven-plugin</artifactId> - <version>5.4.0</version> + <version>6.0.0</version> <executions> <execution> <goals> @@ -218,6 +218,7 @@ </modelPackage> <configOptions> <sourceFolder>src/main/kotlin</sourceFolder> + <documentationProvider>none</documentationProvider> <dateLibrary>java8</dateLibrary> <interfaceOnly>true</interfaceOnly> <useTags>true</useTags> diff --git a/src/main/kotlin/fr/gouv/stopc/submissioncode/controller/RestExceptionHandler.kt b/src/main/kotlin/fr/gouv/stopc/submissioncode/controller/RestExceptionHandler.kt index 4847ab7ddeeea55b34040fe0b276677a3ba0214e..0b22c1fc729c7a74fd70bc2cd8c2e11e2362a92a 100644 --- a/src/main/kotlin/fr/gouv/stopc/submissioncode/controller/RestExceptionHandler.kt +++ b/src/main/kotlin/fr/gouv/stopc/submissioncode/controller/RestExceptionHandler.kt @@ -1,8 +1,8 @@ package fr.gouv.stopc.submissioncode.controller import com.fasterxml.jackson.databind.exc.MismatchedInputException +import fr.gouv.stopc.submissioncode.api.model.ErrorDetails import fr.gouv.stopc.submissioncode.api.model.ErrorResponse -import fr.gouv.stopc.submissioncode.api.model.ErrorResponseErrors import org.slf4j.LoggerFactory.getLogger import org.springframework.http.HttpHeaders import org.springframework.http.HttpStatus @@ -38,9 +38,9 @@ class RestExceptionHandler(private val servletRequest: HttpServletRequest) : Res ): ResponseEntity<Any> { return badRequestAndLogErrors( ex.fieldErrors.map { - ErrorResponseErrors(it.field, it.code, it.defaultMessage) + ErrorDetails(it.field, it.code ?: "", it.defaultMessage ?: "") } + ex.globalErrors.map { - ErrorResponseErrors("", it.code, it.defaultMessage) + ErrorDetails("", it.code ?: "", it.defaultMessage ?: "") } ) } @@ -48,9 +48,9 @@ class RestExceptionHandler(private val servletRequest: HttpServletRequest) : Res @ExceptionHandler fun handle(ex: ConstraintViolationException): ResponseEntity<Any> { val errors = ex.constraintViolations.map { - ErrorResponseErrors( + ErrorDetails( field = it.propertyPath.toString(), - code = it.constraintDescriptor.annotation.annotationClass.simpleName, + code = it.constraintDescriptor.annotation.annotationClass.java.simpleName, message = it.message ) } @@ -65,25 +65,25 @@ class RestExceptionHandler(private val servletRequest: HttpServletRequest) : Res ): ResponseEntity<Any> { val cause = ex.cause val error = if (cause is MismatchedInputException) { - ErrorResponseErrors( + ErrorDetails( field = cause.path .map { if (it.fieldName != null) ".${it.fieldName}" else "[${it.index}]" } .joinToString("") .removePrefix("."), code = "HttpMessageNotReadable", - message = ex.rootCause!!.message + message = ex.rootCause?.message ?: "" ) } else { - ErrorResponseErrors( + ErrorDetails( field = "", - code = ex::class.simpleName, - message = ex.message + code = ex::class.java.simpleName, + message = ex.message ?: "" ) } return badRequestAndLogErrors(listOf(error)) } - private fun badRequestAndLogErrors(errors: List<ErrorResponseErrors>): ResponseEntity<Any> { + private fun badRequestAndLogErrors(errors: List<ErrorDetails>): ResponseEntity<Any> { val errorResponseBody = ErrorResponse( status = HttpStatus.BAD_REQUEST.value(), error = HttpStatus.BAD_REQUEST.reasonPhrase, diff --git a/src/main/resources/openapi-errors-v1.yml b/src/main/resources/openapi-errors-v1.yml index 330d6f4e43b732dd420f325f52d8dff6d4f0c015..415da46f34049e98f8f808e967509835d34f1625 100644 --- a/src/main/resources/openapi-errors-v1.yml +++ b/src/main/resources/openapi-errors-v1.yml @@ -42,6 +42,23 @@ components: path: /api/v1/resource timestamp: "2021-06-01T11:28:23.603Z" schemas: + ErrorDetails: + type: object + description: details about the error + properties: + field: + type: string + description: the field name having an error + code: + type: string + description: an error code + message: + type: string + description: an error message + required: + - field + - code + - message ErrorResponse: type: object properties: @@ -64,18 +81,7 @@ components: errors: type: array items: - type: object - description: details about the error - properties: - field: - type: string - description: the field name having an error - code: - type: string - description: an error code - message: - type: string - description: an error message + $ref: "#/components/schemas/ErrorDetails" minLength: 1 required: - status