我使用 spring cloud 并在 Consul 中注册我的微服务。微服务应该使用 JSON 和 XML 接受类型。因此,添加了以下 2 个编组器。但是,当实施这 2 个 bean 时,领事健康检查开始会导致异常:HttpMediaTypeNotAcceptableException: Could not find acceptable representation
. 如果删除了 XML 的编组器,则运行状况检查开始工作正常。你能解释一下为什么添加 marshallerMediaType.APPLICATION_XML
会导致 consul 健康检查异常吗?
注意:我尝试通过 curl/heath
向带有标头的应用程序发送请求,accept=application/json
即使MediaType.APPLICATION_XML
启用了 marshaller for,答案也是正确的。不幸的是,领事发送带有文本/纯接受类型的请求。
@Bean
public MarshallingHttpMessageConverter marshallingHttpMessageConverter() {
Jaxb2Marshaller jaxb2Marshaller = jaxb2Marshaller();
MarshallingHttpMessageConverter marshallingHttpMessageConverter = new MarshallingHttpMessageConverter();
marshallingHttpMessageConverter.setMarshaller(jaxb2Marshaller);
marshallingHttpMessageConverter.setUnmarshaller(jaxb2Marshaller);
List<MediaType> supportedMediaTypes = new ArrayList<>();
supportedMediaTypes.add(MediaType.APPLICATION_XML);
marshallingHttpMessageConverter.setSupportedMediaTypes(supportedMediaTypes);
return marshallingHttpMessageConverter;
}
和
@Bean
public MappingJackson2HttpMessageConverter marshallingHttpMessageConverterJson() {
MappingJackson2HttpMessageConverter converter = new MappingJackson2HttpMessageConverter();
converter.setObjectMapper(new ObjectMapper());
List<MediaType> supportedMediaTypes = new ArrayList<>();
supportedMediaTypes.add(MediaType.APPLICATION_JSON);
converter.setSupportedMediaTypes(supportedMediaTypes);
return converter;
}