请求验证错误时为空响应正文(Apache CXF、JAX-RS)
Empty response body on request validation Error (Apache CXF, JAX-RS)
我正在使用 Apache CXF、JAX-RS 和 JSR-303 验证。
验证工作正常,对于无效的请求对象,我在日志中有 HTTP 400 响应和验证错误,但我的响应正文是空的。
如何在响应正文中获取有关验证错误的详细信息?
我使用 Spring Boot 1.5.6,Apache CXF 3.1.2。
我在 java 配置中设置了 CXF
@Bean
BeanValidationFeature commonValidationFeature() {
return new BeanValidationFeature();
}
@Bean
ValidationExceptionMapper exceptionMapper() {
return new ValidationExceptionMapper();
}
@Bean
JAXRSParameterNameProvider parameterNameProvider() {
return new JAXRSParameterNameProvider();
}
@Bean
BeanValidationProvider validationProvider() {
return new BeanValidationProvider(parameterNameProvider());
}
@Bean
JAXRSBeanValidationInvoker validationInvoker() {
final JAXRSBeanValidationInvoker validationInvoker = new JAXRSBeanValidationInvoker();
validationInvoker.setProvider(validationProvider());
return validationInvoker;
}
@Bean
JAXRSBeanValidationFeature validationFeature() {
final JAXRSBeanValidationFeature feature = new JAXRSBeanValidationFeature();
feature.setProvider(validationProvider());
return feature;
}
然后我使用这些 bean 来设置 org.apache.cxf.endpoint.Server
JAXRSServerFactoryBean serverFactoryBean = new JAXRSServerFactoryBean();
serverFactoryBean.setProvider(new JacksonJsonProvider(objectMapper));
serverFactoryBean.setProvider(exceptionMapper());
serverFactoryBean.setFeatures(Arrays.asList(commonValidationFeature(),
swagger2Feature()));
serverFactoryBean.setBus(bus);
serverFactoryBean.setInvoker(validationInvoker());
serverFactoryBean.setServiceBeans(Collections.singletonList(myApiImplementation));
return serverFactoryBean.create();
如何在响应正文中获取有关验证错误的详细信息?是否有一些合理的默认值(如 Spring MVC?)我可以自定义验证错误的错误响应吗?
org.apache.cxf.jaxrs.validation.ValidationExceptionMapper
的默认实现不在响应正文中提供有关验证错误的详细信息,但这可以轻松更改。创建 ValidationExceptionMapper
的新实例时,只需要 .setAddMessageToResponse(true);
然后有关验证错误的详细信息出现在响应正文中。
我正在使用 Apache CXF、JAX-RS 和 JSR-303 验证。 验证工作正常,对于无效的请求对象,我在日志中有 HTTP 400 响应和验证错误,但我的响应正文是空的。 如何在响应正文中获取有关验证错误的详细信息?
我使用 Spring Boot 1.5.6,Apache CXF 3.1.2。
我在 java 配置中设置了 CXF
@Bean
BeanValidationFeature commonValidationFeature() {
return new BeanValidationFeature();
}
@Bean
ValidationExceptionMapper exceptionMapper() {
return new ValidationExceptionMapper();
}
@Bean
JAXRSParameterNameProvider parameterNameProvider() {
return new JAXRSParameterNameProvider();
}
@Bean
BeanValidationProvider validationProvider() {
return new BeanValidationProvider(parameterNameProvider());
}
@Bean
JAXRSBeanValidationInvoker validationInvoker() {
final JAXRSBeanValidationInvoker validationInvoker = new JAXRSBeanValidationInvoker();
validationInvoker.setProvider(validationProvider());
return validationInvoker;
}
@Bean
JAXRSBeanValidationFeature validationFeature() {
final JAXRSBeanValidationFeature feature = new JAXRSBeanValidationFeature();
feature.setProvider(validationProvider());
return feature;
}
然后我使用这些 bean 来设置 org.apache.cxf.endpoint.Server
JAXRSServerFactoryBean serverFactoryBean = new JAXRSServerFactoryBean();
serverFactoryBean.setProvider(new JacksonJsonProvider(objectMapper));
serverFactoryBean.setProvider(exceptionMapper());
serverFactoryBean.setFeatures(Arrays.asList(commonValidationFeature(),
swagger2Feature()));
serverFactoryBean.setBus(bus);
serverFactoryBean.setInvoker(validationInvoker());
serverFactoryBean.setServiceBeans(Collections.singletonList(myApiImplementation));
return serverFactoryBean.create();
如何在响应正文中获取有关验证错误的详细信息?是否有一些合理的默认值(如 Spring MVC?)我可以自定义验证错误的错误响应吗?
org.apache.cxf.jaxrs.validation.ValidationExceptionMapper
的默认实现不在响应正文中提供有关验证错误的详细信息,但这可以轻松更改。创建 ValidationExceptionMapper
的新实例时,只需要 .setAddMessageToResponse(true);
然后有关验证错误的详细信息出现在响应正文中。