2017-08-09 16 views
0

私はApache CXF、JAX-RS、JSR-303検証を使用しています。 無効なリクエストオブジェクトの検証が正しく機能しています。HTTP 400の応答と検証エラーがログに記録されていますが、応答本体が空です。 レスポンスボディの検証エラーについての詳細はどうですか?リクエストの検証時に空のレスポンスボディエラー(Apache CXF、JAX-RS)

私はSpring Boot 1.5.6、Apache CXF 3.1.2を使用します。 Java構成で

Iセットアップ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; 
} 

はその後、私はセットアップにそれらの豆を使用し、応答本体に検証エラーの詳細を持ってする方法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のような)妥当なデフォルトがありますか?検証エラーのエラー応答をカスタマイズできますか?

答えて

1

org.apache.cxf.jaxrs.validation.ValidationExceptionMapperのデフォルトの実装では、応答本体の検証エラーに関する詳細は提供されていませんが、これは簡単に変更できます。 ValidationExceptionMapperの新しいインスタンスを作成する場合は、.setAddMessageToResponse(true);

が必要です。次に、検証エラーに関する詳細が応答本体にあります。

+1

新しいCXFバージョンでは、コンテンツをフォーマットするメソッド(たとえば、プレーンテキストの代わりにJSONペイロードを取得する)をオーバーライドすることもできます。 –

関連する問題