当 jax-rs 作为 Spring 引导应用程序运行时,jax-rs @Provider 无法正确获取

jax-rs @Provider doesn't pick up correctly when jax-rs runs as Spring Boot app

我已将 JAX-RS 与 Spring 启动应用程序集成。

我想使用 LocalDate 作为查询参数。

端点示例如下:

@GET
@Produces(MediaType.APPLICATION_JSON)
@Path("book/publication/year")
override fun findInRange(
    @QueryParam("from") fromDate: LocalDate?,
    @QueryParam("to") toDate: LocalDate?
): Response

如果我使用 String 一切正常,那么 LocalDate 类型本身就有问题。

我找到了一篇来自 Sebastian Daschner 的文章:https://blog.sebastian-daschner.com/entries/jaxrs-convert-params

我现在有这些 类:

LocalDateConverter.kt:

class LocalDateConverter : ParamConverter<LocalDate?> {
    override fun fromString(value: String?): LocalDate? {
        return if (value == null) null else LocalDate.parse(value)
    }

    override fun toString(value: LocalDate?): String? {
        return value?.toString()
    }
}

LocalDateParamConverterProvider.kt:

@Provider
public class LocalDateParamConverterProvider : ParamConverterProvider {
    override fun <T> getConverter(
        rawType: Class<T>,
        genericType: Type,
        annotations: Array<Annotation>
    ): ParamConverter<T>? {
        return if (rawType == LocalDate::class.java) LocalDateConverter() as ParamConverter<T> else null
    }
}

一切都没有改变。问题是如何让 Spring Boot 在 Spring Boot 中选择自定义 ParameterConverterProvider when 运行?

因为我有 Spring Boot + JAX-RS 集成,我需要注册从它继承的 ResourceConfig 或 类 中的所有 JAX-RS 类 .

register(LocalDateParamConverterProvider::class.java)

这篇文章帮了大忙:https://dzone.com/articles/using-jax-rs-with-spring-boot-instead-of-mvc