当 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
我已将 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