我嘗試將Bean Validation用於具有Apache CXF的REST API。我讀Apache CXF Documentation,它對根資源很好,但它不適用於sub resource locators。子資源的約束被忽略。使用CXF進行JAX-RS子資源的Bean驗證
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)?是類似的,但關於卡拉夫和藍圖,並不包含我的問題的解決方案。