gpt4 book ai didi

java - 使用 CXF 对 JAX-RS 子资源进行 Bean 验证

转载 作者:搜寻专家 更新时间:2023-11-01 02:38:46 25 4
gpt4 key购买 nike

我尝试使用 Bean Validation使用 Apache CXF 为我的 REST API。我读了Apache CXF Documentation它适用于根资源,但不适用于 sub resource locators .子资源的约束被忽略。

Maven 依赖项:

<dependency>
<groupId>org.apache.cxf</groupId>
<artifactId>cxf-rt-frontend-jaxrs</artifactId>
<version>3.1.5</version>
</dependency>
<dependency>
<groupId>javax.validation</groupId>
<artifactId>validation-api</artifactId>
<version>1.1.0.Final</version>
</dependency>
<dependency>
<groupId>org.apache.bval</groupId>
<artifactId>bval-jsr</artifactId>
<version>1.1.0</version>
</dependency>

Java代码:

@Named
@Path("test")
public class TestResource {

@Inject
private TestSubResource subResource;

@Path("sub")
public TestSubResource getSubResource() {
return subResource;
}

@GET
public void find(@NotNull @QueryParam("value") String value) {
}
}

@Named
public class TestSubResource {

@GET
public void find(@NotNull @QueryParam("value") String value) {
}
}

CXF 配置:

<bean id="validationProvider" class="org.apache.cxf.validation.BeanValidationProvider" />
<bean id="validationInInterceptor" class="org.apache.cxf.jaxrs.validation.JAXRSBeanValidationInInterceptor">
<property name="provider" ref="validationProvider" />
</bean>
<jaxrs:server address="/rest" id="test" staticSubresourceResolution="true">
<jaxrs:serviceBeans>
<ref bean="testResource" />
</jaxrs:serviceBeans>
<jaxrs:inInterceptors>
<ref bean="validationInInterceptor" />
</jaxrs:inInterceptors>
</jaxrs:server>

我发现了以下问题:

但两者都是关于返回值的验证,而不是关于请求参数的验证。

问题CXF in Karaf: how to configure bean validation on subresources (preferably using Blueprint)?是相似的,但是关于 Karaf 和 Blueprint 并且没有包含我的问题的解决方案。

最佳答案

我会说自定义调用程序是可行的方法。但我猜你已经根据你的评论知道了。

<bean id="validationProvider" class="org.apache.cxf.validation.BeanValidationProvider" />
<bean id="validationInInterceptor"
class="org.apache.cxf.jaxrs.validation.JAXRSBeanValidationInInterceptor">
<property name="provider" ref="validationProvider" />
</bean>
<bean id="validationInvoker" class="org.apache.cxf.jaxrs.validation.JAXRSBeanValidationInvoker"></bean>

<jaxrs:server address="/rest" id="test"
staticSubresourceResolution="true">
<jaxrs:serviceBeans>
<ref bean="testResource" />
</jaxrs:serviceBeans>
<jaxrs:inInterceptors>
<ref bean="validationInInterceptor" />
</jaxrs:inInterceptors>
<jaxrs:invoker>
<ref bean="validationInvoker" />
</jaxrs:invoker>
</jaxrs:server>

我在你的例子中试过了,它有效。但我认为您需要使用 ExceptionMapper,因为您没有获得适当的异常。我认为 ValidationExceptionMapper 是正确的选择。

编辑- 根据评论更新异常映射器类

关于java - 使用 CXF 对 JAX-RS 子资源进行 Bean 验证,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39488751/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com