All Downloads are FREE. Search and download functionalities are using the official Maven repository.

io.javalin.plugin.openapi.jackson.JavalinModelResolver.kt Maven / Gradle / Ivy

The newest version!
package io.javalin.plugin.openapi.jackson

import com.fasterxml.jackson.databind.JavaType
import com.fasterxml.jackson.databind.ObjectMapper
import com.fasterxml.jackson.databind.SerializationFeature
import io.swagger.v3.core.converter.AnnotatedType
import io.swagger.v3.core.converter.ModelConverter
import io.swagger.v3.core.converter.ModelConverterContext
import io.swagger.v3.core.jackson.ModelResolver
import io.swagger.v3.core.util.PrimitiveType
import io.swagger.v3.oas.models.media.Schema
import java.time.Instant

class JavalinModelResolver(mapper: ObjectMapper) : ModelResolver(mapper) {
    override fun resolve(annotatedType: AnnotatedType?, context: ModelConverterContext?, next: MutableIterator?): Schema<*> {
        if (annotatedType == null || shouldIgnoreClass(annotatedType.type)) {
            return super.resolve(annotatedType, context, next)
        }
        val type = extractJavaType(annotatedType)

        if (type.isTypeOrSubTypeOf(Instant::class.java) && _mapper.isEnabled(SerializationFeature.WRITE_DATES_AS_TIMESTAMPS)
            && annotatedType.ctxAnnotations?.none { it.annotationClass == io.swagger.v3.oas.annotations.media.Schema::class.java } != false
        ) {
            return PrimitiveType.LONG.createProperty()
        }

        return super.resolve(annotatedType, context, next)
    }

    private fun extractJavaType(annotatedType: AnnotatedType): JavaType {
        return if (annotatedType.type is JavaType) {
            annotatedType.type as JavaType
        } else {
            this._mapper.constructType(annotatedType.type)
        }
    }
}





© 2015 - 2025 Weber Informatics LLC | Privacy Policy