让我预先感谢你的帮助!
我在一个spring boot应用程序中有一个奇怪的行为。我来给你解释一下:
我正在用一些不错的rest-json服务包装一些遗留的Web服务(自定义xml消息)(通过spring-mvc和Spring boots并使用jackson序列化东西)
为了与遗留系统通信,我创建了一个自定义XmlMapper、序列化器和反序列化器。
最后,我创建了一个httpclientconfig,以定义一些http连接属性。。。
但在启动应用并尝试访问任何终结点(例如执行器终结点)后,应用仅返回 xml。Event swagger endpoints 返回 xml(是什么让 swagger-ui 变得疯狂。
以下是一些类:
@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;
}
}
我调用findAndregisterModules,因为我也在开发一些库,为服务提供额外的序列化器(模块化的东西)
我完全不明白。任何帮助都将不胜感激...
问候!
我通过扩展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/");
}
}
再次感谢!
问题内容: 我相信它在某个时候可以工作,但是现在xpath返回null。有人可以帮助我在以下代码中找到我的愚蠢错误吗? 还是即使在setNamespaceAware(false)之后也必须提供NamespaceContext? XML文档在这里: 问题答案: 三个选择是显而易见的。按照我的观点,最简单的顺序是: 将XPath从更改为。有点笨拙,但它将忽略名称空间。如果仍然为您提供零,则说明问题不在
所以我得到了一个xml文件从肥皂服务(我无法控制)。它返回了一个xmlns,这导致了简单的XML问题。我正在运行一个str_replace来解决这个问题,但是现在simpleXML只返回一个空对象。XML结构看起来很好,没有错误,只是一个空对象。 返回:SimpleXMLElement对象() str replace之前的XML源是: 更换后: 任何帮助都将不胜感激,这快把我逼疯了! ----因此
我是Java和Springboot的新手。尝试使用一个参数terminalId(字符串)实现一个简单的get请求。 我完全迷路了。
我正在尝试使用ASP.NET Web API返回一个JSON文件(用于测试)。 在Fiddler中,它确实显示为Json类型,但当我在Chrome中调试并查看对象时,它显示为单独行数组(左)。正确的图像是当我在使用它时该对象应该看起来的样子。 有人能告诉我应该返回什么来实现正确格式的Json结果吗?
我试图编写一个方法,它接受@PathVariable参数,并将用户重定向到一个jsp文件。 @pathvariable(value=“customerId”)字符串customerId @pathvariable(name=“customerId”)字符串customerId @pathvariable(“customerId”)字符串customerId 谢谢你的帮助。
本文向大家介绍Java Web Service返回带有>和相关面试题,主要包含被问及Java Web Service返回带有>和时的应答技巧和注意事项,需要的朋友参考一下 框架正在按照您所说的去做。您的方法返回,表示生成的WSDL应该具有类型为的响应消息。众所周知,XML字符串必须将某些字符编码为字符实体引用(即“ ”变为“ ”,因此XML解析器将其视为字符串,而不是您期望的XML元素的开头)。如