gpt4 book ai didi

java - 如何在 Jackson xml 解析器中将八位字节流解析为 json?

转载 作者:行者123 更新时间:2023-12-02 06:09:52 25 4
gpt4 key购买 nike

我有时会收到设置了 content-type=application/octet-stream 的 Web 服务响应,无论如何它实际上是 application/xml

由于我无法控制 Web 服务,因此我仍然想告诉 jackson(我正在与 spring-boot 一起使用)将这些响应解析为 xml。但如何呢?

我首先尝试为 jackson 映射器允许八位字节流,到目前为止它有效:

@Bean
public RestTemplateCustomizer customizeJackson2MessageConverter() {
return restTemplate -> {
for (var converter : restTemplate.getMessageConverters()) {
if (converter instanceof MappingJackson2HttpMessageConverter) {
jackson.getSupportedMediaTypes().add((MediaType.APPLICATION_OCTET_STREAM);
}
}
};
}

但是:当涉及到解析时,我如何告诉 Jackson 忽略/重写内容类型,并仍然将其解析为正常的 json?

Caused by: org.springframework.http.converter.HttpMessageNotReadableException: JSON parse error: Unexpected character ('<' (code 60)): expected a valid value (number, String, array, object, 'true', 'false' or 'null'); nested exception is com.fasterxml.jackson.core.JsonParseException: Unexpected character ('<' (code 60)): expected a valid value (number, String, array, object, 'true', 'false' or 'null')
at [Source: (ByteArrayInputStream); line: 1, column: 2]
at org.springframework.http.converter.json.AbstractJackson2HttpMessageConverter.readJavaType(AbstractJackson2HttpMessageConverter.java:245) ~[spring-web-5.1.6.RELEASE.jar:5.1.6.RELEASE]
at org.springframework.http.converter.json.AbstractJackson2HttpMessageConverter.read(AbstractJackson2HttpMessageConverter.java:227) ~[spring-web-5.1.6.RELEASE.jar:5.1.6.RELEASE]
at org.springframework.web.client.HttpMessageConverterExtractor.extractData(HttpMessageConverterExtractor.java:102) ~[spring-web-5.1.6.RELEASE.jar:5.1.6.RELEASE]
... 113 more

最佳答案

我按照@chrylis的建议做了:

public class ContentTypeInterceptor implements ClientHttpRequestInterceptor {
@Override
public ClientHttpResponse intercept(HttpRequest request, byte[] body, ClientHttpRequestExecution execution) throws IOException {
ClientHttpResponse http = execution.execute(request, body);

HttpHeaders headers = http.getHeaders();
if (headers.getContentType() == MediaType.APPLICATION_OCTET_STREAM) {
headers.setContentType(MediaType.APPLICATION_XML);
}

return http;
}
}

关于java - 如何在 Jackson xml 解析器中将八位字节流解析为 json?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55917873/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com