Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/332.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 使用相同的RestTemplate';s对象映射器,用于独立对象映射器_Java_Spring Boot_Resttemplate_Objectmapper_Jackson2 - Fatal编程技术网

Java 使用相同的RestTemplate';s对象映射器,用于独立对象映射器

Java 使用相同的RestTemplate';s对象映射器,用于独立对象映射器,java,spring-boot,resttemplate,objectmapper,jackson2,Java,Spring Boot,Resttemplate,Objectmapper,Jackson2,以下是我的设置: 带有自定义MessageConverter的ObjectMapper的restemplate,具有一些反序列化功能和问题处理程序(Jackson Fasterxml 2.8.9)。restemplate也有一个自定义的ResponseErrorHandler 在使用restemplate进行REST调用期间,如果响应状态需要由ResponseErrorHandler处理,我可能必须解析流体并将其映射到对象 我想知道,如果我能将我的ObjectMapper变成一个bean(@be

以下是我的设置:

带有自定义
MessageConverter
ObjectMapper
restemplate
,具有一些反序列化功能和问题处理程序(Jackson Fasterxml 2.8.9)。
restemplate
也有一个自定义的
ResponseErrorHandler

在使用
restemplate
进行REST调用期间,如果响应状态需要由
ResponseErrorHandler
处理,我可能必须解析流体并将其映射到对象

我想知道,如果我能将我的
ObjectMapper
变成一个bean(
@bean
/
@qualifier
),我能在
restemplate
ObjectMapper
中使用这个单例bean,并将它作为依赖项注入相同的
restemplate
resteerrorHandler
?这样安全吗


我之所以要这样做,是因为在数据绑定方面,所有反序列化功能和问题处理程序都应该是相同的——无论是发生在
restemplate
数据提取机制内部,还是需要在
ResponseErrorHandler#handleError()期间映射响应主体

定义对象映射器和RESTTemplatebean

或者在每次创建模板时手动重新创建模板

请记住将转换器添加为列表中的第一个转换器

@Bean
public RestTemplate restTemplate() {
    RestTemplate rest = new RestTemplate();
    // Add the object mapper as first instance in list for eager discovery
    rest.getMessageConverters().add(0, jacksonConverter());
    return rest;
}

@Bean
public HttpMessageConverter jacksonConverter() {
    MappingJacksonHttpMessageConverter converter = new MappingJacksonHttpMessageConverter();
    converter.setObjectMapper(objectMapper());
    return converter;
}

@Bean
public ObjectMapper objectMapper() {
    return new ObjectMapper();
}

这个问题的上下文可能重复,这是不同的。您必须遍历
restemplate
提供的所有
MessageConverter
,以找到合适的转换器并获取其
ObjectMapper
。当
restemplate
提取数据时,它在内部使用此
ObjectMapper
,因此我不确定在返回
restemplate
之前,如果在同一
restemplate
的自定义
resteErrorHandler
中再次使用,它处于什么状态。是的,问题是,我可以安全地在自定义的
restemplate
resteErrorHandler
中使用
@Bean ObjectMapper
从流中反序列化,即使它将是
restemplate
用于提取数据的同一个Bean对象(请参见
restemplate
——另请注意第691行)