在跟踪了一些关于Spring的学习路径和教程之后,我仍然有时会以最优雅的方式做事。
我的项目我需要配置一个RestTemplate对象来处理GregorianCalendar,方法是在Json帖子体中以所需的格式打印日期,并将帖子体的内容记录到日志文件中。
我认为不需要在这里创建一个子类,只需将现有属性设置为自定义值即可完成,为此创建一些其他bean。
此代码没有问题,但如何将其注入我想要使用它的类中?当我使用@Autowired时,我需要指定一个限定符来区分框架RestTemplate类和我自定义的类。 或者我可以使用其id值注入bean,这是这里方法的名称,所以在我的情况下setuRestTemplate? 可能有一个更容易的方法来注入这个bean的名称,但我不知道这是什么优先。
import org.springframework.web.client.RestTemplate;
//more imports
@Configuration
public class SixdegreesAppContext {
@Bean
public RestTemplate setuRestTemplate() {
RestTemplate restTemplate = new RestTemplate();
restTemplate.setMessageConverters(getSetuMessageConverters());
//enable logging of post body
ClientHttpRequestInterceptor loggingRequestInterceptor = new LoggingRequestInterceptor();
List<ClientHttpRequestInterceptor> ris = new ArrayList<>();
ris.add(loggingRequestInterceptor);
restTemplate.setInterceptors(ris);
restTemplate.setRequestFactory(new BufferingClientHttpRequestFactory(new SimpleClientHttpRequestFactory())); //no sure why this is needed
return restTemplate;
}
@Bean
public List<HttpMessageConverter<?>> getSetuMessageConverters() {
List<HttpMessageConverter<?>> converters = new ArrayList<>();
MappingJackson2HttpMessageConverter jackson2HttpMessageConverter = new MappingJackson2HttpMessageConverter();
jackson2HttpMessageConverter.setObjectMapper(getSetuObjectMapper());
converters.add(jackson2HttpMessageConverter);
return converters;
}
@Bean
public ObjectMapper getSetuObjectMapper() {
ObjectMapper jacksonObjectMapper = new ObjectMapper();
SimpleModule module = new SimpleModule();
module.addSerializer(XMLGregorianCalendar.class, new XmlGregorianCalendarSerializer());
jacksonObjectMapper.registerModule(module);
return jacksonObjectMapper;
}
}
答案 0 :(得分:1)
您可以将bean命名为:
public final static String REST_TEMPLATE_BEAN_NAME = "myRestTemplate";
@Bean(name = {REST_TEMPLATE_BEAN_NAME})
public RestTemplate getRestTemplate() {
//...
return new CustomizeRestTemplate();
}
然后你可以参考如下:
@Resource(name = REST_TEMPLATE_BEAN_NAME)
RestTemplate restTemplate;
请记住,REST_TEMPLATE_BEAN_NAME
是您之前定义的静态字段。这是你想要的吗?