65.3.2. JAX-RS 配置
概述 复制链接链接已复制到粘贴板!
这部分论述了如何在 JAX-RS 服务端点中启用 bean 验证,该端点在 Blueprint XML 或 Spring XML 中定义。用于执行 bean 验证的拦截器在 JAX-WS 端点和 JAX-RS 1.1 端点(JAX-RS 2.0 端点)都很常见(但使用不同的拦截器类)。
命名空间 复制链接链接已复制到粘贴板!
在本节所示的 XML 示例中,您必须记得将 jaxws
命名空间前缀映射到适当的命名空间,可以是 Blueprint 或 Spring,如下表中所示:
XML 语言 | 命名空间 |
---|---|
蓝图(Blueprint) | |
Spring |
Bean 验证功能 复制链接链接已复制到粘贴板!
在 JAX-RS 端点上启用 Bean 验证的最简单方式是将 bean 验证功能 添加到端点。Bean 验证功能由以下类实现:
org.apache.cxf.validation.BeanValidationFeature
-
通过将此功能类的实例添加到 JAX-RS 端点(通过 Java API 或 XML 中的
jaxrs:
features
验证异常映射程序 复制链接链接已复制到粘贴板!
JAX-RS 端点还要求您配置 验证异常映射程序,它负责将验证异常映射到 HTTP 错误响应。以下类实施 JAX-RS 的验证异常映射:
org.apache.cxf.jaxrs.validation.ValidationExceptionMapper
-
根据 JAX-RS 2.0 规范实施验证异常映射:任何输入参数验证违反情况都映射到 HTTP 状态代码
400 Bad Request
;以及任何返回值验证违反(或内部验证违反)都映射到 HTTP 状态代码500 Internal Server Error
。
JAX-RS 配置示例 复制链接链接已复制到粘贴板!
以下 XML 示例演示了如何在 JAX-RS 端点中启用 bean 验证功能,方法是添加 commonValidationFeature
bean 作为 JAX-RS 功能,通过将 exceptionMapper
bean 添加为 JAX-RS 供应商:
有关 HibernateValidationProviderResolver
类的示例实现,请参阅 “HibernateValidationProviderResolver 类示例”一节。只需要在 OSGi 环境(Apache Karaf)环境中配置 beanValidationProvider
。
根据具体情况,请记住将 jaxrs
前缀映射到蓝图或 Spring 的相应 XML 命名空间。
Common bean 验证 1.1 拦截器 复制链接链接已复制到粘贴板!
您可以选择安装 bean 验证拦截器来获取对验证实施进行更精细的控制,而不是使用 bean 验证功能。JAX-RS 将与 JAX-WS 相同的拦截器用于此目的-请参阅 “Common bean 验证 1.1 拦截器”一节
带有 bean 验证拦截器的 JAX-RS 配置示例 复制链接链接已复制到粘贴板!
以下 XML 示例演示了如何在 JAX-RS 端点中启用 bean 验证功能,方法是明确将相关的 In 拦截器 bean 和 Out 拦截器 bean 添加到服务器端点:
有关 HibernateValidationProviderResolver
类的示例实现,请参阅 “HibernateValidationProviderResolver 类示例”一节。只需要在 OSGi 环境(Apache Karaf)环境中配置 beanValidationProvider
。
配置 BeanValidationProvider 复制链接链接已复制到粘贴板!
您可以将自定义 BeanValidationProvider
实例注入验证拦截器,如 “配置 BeanValidationProvider”一节 所述。