2017-08-17 11 views
1

あなたの助けを前にありがとう!xmlでjsonとjsonでSpringブートのみxmlを返す

私は春のブートアプリケーションで奇妙な動作をしています。私はあなたのためにそれを説明してみましょう:

を私は(春-MVCと春ブーツ経由とかシリアライズのためにジャクソンを使用して)いくつかの素晴らしい休息-JSONサービスと一部のレガシーWebサービス(カスタムXMLメッセージ)を包む

をしていますレガシーシステムと通信するために、カスタムXmlMapper、シリアライザとデシリアライザを作成しました。

そして最後に、私はいくつかのhttp接続のプロパティを定義するために、httpclientconfigを作成している...

しかし、アプリを起動し、任意のエンドポイント(例えばアクチュエータのもの)を訪問しようとした後、アプリのみを返しますxml。イベント闊歩エンドポイントは威張っ-UIが夢中に作るもの(XMLを返す

これらは、クラスの一部です:私はのでI、findAndregisterModulesに呼び出す

@Configuration 
    public class HttpClientConfig { 
     private static final Logger logger = LoggerFactory.getLogger(HttpClientConfig.class); 
     @Value(value = "${app.http.client.max_total_connections}") 
     public String MAX_TOTAL_CONNECTIONS; 

     @Value(value = "${app.http.client.max_connections_per_route}") 
     public String MAX_CONNECTIONS_PER_ROUTE; 

     @Value(value = "${app.http.client.connection_timeout_milliseconds}") 
     public String CONNECTION_TIMEOUT_MILLISECONDS; 

     @Bean 
     public ClientHttpRequestFactory httpRequestFactory() { 
      return new HttpComponentsClientHttpRequestFactory(httpClient()); 
     } 
     @Autowired 
     private XmlMapper xmlMapper; 
     @Bean 
     public RestTemplate restTemplate() { 
      RestTemplate restTemplate = new RestTemplate(httpRequestFactory()); 
      List<HttpMessageConverter<?>> converters = restTemplate.getMessageConverters(); 

      for (HttpMessageConverter<?> converter : converters) { 
       if (converter instanceof MappingJackson2HttpMessageConverter) { 
        MappingJackson2HttpMessageConverter jsonConverter = (MappingJackson2HttpMessageConverter) converter; 
        jsonConverter.setObjectMapper(new ObjectMapper()); 
       } 
       if (converter instanceof MappingJackson2XmlHttpMessageConverter) { 
        MappingJackson2XmlHttpMessageConverter jsonConverter = (MappingJackson2XmlHttpMessageConverter) converter;    
        jsonConverter.setObjectMapper(xmlMapper); 
       } 
      } 

      logger.debug("restTemplate object created===================================="); 
      return restTemplate; 
     } 

     @Bean 
     public HttpClient httpClient() { 
      HttpClient httpClient = null; 
      try { 
       HttpClientBuilder httpClientBuilder = HttpClientBuilder.create(); 

       // disable SSL check 
       SSLContext sslContext = new SSLContextBuilder().loadTrustMaterial(null, new TrustStrategy() { 
        @Override 
        public boolean isTrusted(java.security.cert.X509Certificate[] arg0, String arg1) 
          throws CertificateException { 
         return true; 
        } 
       }).build(); 
       httpClientBuilder.setSSLContext(sslContext); 
       // don't check Hostnames 
       HostnameVerifier hostnameVerifier = NoopHostnameVerifier.INSTANCE; 
       SSLConnectionSocketFactory sslSocketFactory = new SSLConnectionSocketFactory(sslContext, hostnameVerifier); 
       Registry<ConnectionSocketFactory> socketFactoryRegistry = RegistryBuilder.<ConnectionSocketFactory>create() 
         .register("http", PlainConnectionSocketFactory.getSocketFactory()) 
         .register("https", sslSocketFactory).build(); 

       PoolingHttpClientConnectionManager connMgr = new PoolingHttpClientConnectionManager(socketFactoryRegistry); 
       connMgr.setMaxTotal(Integer.parseInt(MAX_TOTAL_CONNECTIONS)); 
       connMgr.setDefaultMaxPerRoute(Integer.parseInt(MAX_CONNECTIONS_PER_ROUTE)); 
       RequestConfig config = RequestConfig.custom() 
         .setConnectTimeout(Integer.parseInt(CONNECTION_TIMEOUT_MILLISECONDS)).build(); 

       httpClientBuilder.setDefaultRequestConfig(config); 
       httpClientBuilder.setConnectionManager(connMgr); 

       // to avoid nohttpresponse 
       httpClientBuilder.setRetryHandler(new HttpRequestRetryHandler() { 

        @Override 
        public boolean retryRequest(IOException exception, int executionCount, 
          org.apache.http.protocol.HttpContext context) { 
         // TODO Auto-generated method stub 
         return true; 
        } 
       }); 
       httpClient = httpClientBuilder.build(); 
      } catch (Exception e) { 
       logger.error("Excption creating HttpClient: ", e); 
      } 
      return httpClient; 
     } 
    } 

とXMLマッパー

@Configuration 
    public class XmlMapperConfig{ 

     @Bean 
     public XmlMapper getXmlMapper() { 
      XmlMapper mapper=new XmlMapper();  
      SimpleModule module = new SimpleModule();  
      module.addSerializer(CafRequestObject.class, new CafRequestObjectSerializer()); 
      mapper.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false); 
      mapper.registerModule(module);  
      mapper.findAndRegisterModules(); 
      CafXmlSerializationProvider cafXmlProvider=new CafXmlSerializationProvider(new XmlRootNameLookup());   

      mapper.setSerializerProvider(cafXmlProvider); 
      return mapper; 
     } 


    } 

サービスのための追加のシリアライザを提供するいくつかのライブラリを開発中です(モジュール化されたもの)

私は完全にこれで失われています。 preciated ...

よろしく!

答えて

0

は、私はそれがWebMvcConfigurerAdapterを拡張解決した:

@Configuration 
    @EnableWebMvc 
    public class WebConfig extends WebMvcConfigurerAdapter { 


     @Override 
     public void configureContentNegotiation(ContentNegotiationConfigurer configurer) { 
      configurer.defaultContentType(MediaType.APPLICATION_JSON); 
     } 
     @Override 
     public void addResourceHandlers(ResourceHandlerRegistry registry) { 
      registry 
       .addResourceHandler("swagger-ui.html") 
       .addResourceLocations("classpath:/META-INF/resources/"); 
      registry 
       .addResourceHandler("/webjars/**") 
       .addResourceLocations("classpath:/META-INF/resources/webjars/"); 
     } 
    } 

おかげで再び!

関連する問題