RestTemplate Spring boot 中的 NullPointerException MediaType [英] NullPointerException MediaType in RestTemplate Spring boot

查看:150
本文介绍了RestTemplate Spring boot 中的 NullPointerException MediaType的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我正在将 Spring Boot 应用程序从 1.5.6.Release 更新到 2.3.5,但在构建项目时遇到异常.以下是我的错误类:

@Configuration@EnableBatchProcessing@Import({BatchScheduler.class})公共类 MyLogBatchConfiguration {私有静态最终记录器日志 = LoggerFactory.getLogger(MyLogBatchConfiguration.class);@Autowired 私有 SimpleJobLauncher jobLauncher;@自动连线@Qualifier(value = "dataSource1")公共数据源 mainDataSource;@自动连线@Qualifier(value = "dataSource2")公共数据源临时数据源;@Autowired public StepBuilderFactory stepBuilderFactory;@Autowired public JobBuilderFactory jobBuilderFactory;@Autowired 私有 RestTemplate myRestTemplate;@Qualifier(value = "createLocalSessionFactory")@自动连线私人会话工厂 createLocalSessionFactory;@Qualifier(value = "createSessionFactory")@自动连线私人会话工厂 createSessionFactory;@豆角,扁豆RestTemplate restTemplate(RestTemplateBuilder builder) {RestTemplate restTemplate = new RestTemplate();列表<HttpMessageConverter<?>>转换器 = restTemplate.getMessageConverters();for (HttpMessageConverter 转换器:转换器) {如果(MappingJackson2HttpMessageConverter的转换器实例){MappingJackson2HttpMessageConverter jsonConverter =(MappingJackson2HttpMessageConverter) 转换器;jsonConverter.setObjectMapper(new ObjectMapper());jsonConverter.setSupportedMediaTypes(ImmutableList.of(新媒体类型(应用程序"、json"、MappingJackson2HttpMessageConverter.DEFAULT_CHARSET)、新媒体类型(文本"、javascript"、MappingJackson2HttpMessageConverter.DEFAULT_CHARSET)));}}返回休息模板;}@豆角,扁豆public LocalSessionFactoryBean createLocalSessionFactory(@Qualifier("dataSource1") 数据源数据源) {LocalSessionFactoryBean factory = new LocalSessionFactoryBean();factory.setDataSource(dataSource);factory.setPackagesToScan(新字符串[] {X",是",Z"});factory.setHibernateProperties(hibernateProperties());返厂;}@豆角,扁豆public LocalSessionFactoryBean createSessionFactory(@Qualifier("dataSource2") 数据源数据源) {LocalSessionFactoryBean factory = new LocalSessionFactoryBean();factory.setDataSource(dataSource);factory.setPackagesToScan(新字符串[] {X",是",Z"});factory.setHibernateProperties(hibernateProperties());返厂;}

我收到以下错误::

<前>>org.springframework.beans.factory.UnsatisfiedDependencyException:> 创建名为MyLogBatchConfiguration"的 bean 时出错:不满意> 通过字段myRestTemplate"表达的依赖;嵌套异常> 是 org.springframework.beans.factory.UnsatisfiedDependencyException:> 创建名为batchConfiguration"的 bean 时出错:不满意> 通过字段myRestTemplate"表达的依赖;嵌套异常> 是 org.springframework.beans.factory.BeanCreationException: 错误> 创建名为 'restTemplate' 的 bean,在类路径资源中定义> [com//configuration/MyLogBatchConfiguration.class]:Bean实例化> 通过工厂方法失败;嵌套异常是> org.springframework.beans.BeanInstantiationException: 失败> 实例化 [org.springframework.web.client.RestTemplate]:循环> 涉及包含 bean 'MyLogBatchConfiguration' 的参考 -> 考虑将工厂方法声明为静态以独立于> 它的包含实例.工厂方法restTemplate"抛出> 例外;嵌套异常是 java.lang.NullPointerException 在> org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor$AutowiredFieldElement.inject(AutowiredAnnotationBeanPostProcessor.java:643)> 在> org.springframework.beans.factory.annotation.InjectionMetadata.inject(InjectionMetadata.java:130)> 在> org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor.postProcessProperties(AutowiredAnnotationBeanPostProcessor.java:399)> 在> org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.populateBean(AbstractAutowireCapableBeanFactory.java:1420)> 在> org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:593)> 在> org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:516)> 在> org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:324)> ] 在> sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)> 在 java.lang.reflect.Method.invoke(Method.java:498) 在> org.springframework.boot.loader.MainMethodRunner.run(MainMethodRunner.java:49)> 在 org.springframework.boot.loader.Launcher.launch(Launcher.java:107)> 在 org.springframework.boot.loader.Launcher.launch(Launcher.java:58)> 在> org.springframework.boot.loader.JarLauncher.main(JarLauncher.java:88)> 原因:> org.springframework.beans.factory.UnsatisfiedDependencyException:> 创建名为batchConfiguration"的 bean 时出错:不满意> 通过字段myRestTemplate"表达的依赖;嵌套异常> 是 org.springframework.beans.factory.BeanCreationException: 错误> 创建名为 'restTemplate' 的 bean,在类路径资源中定义> [com//configuration/MyLogBatchConfiguration.class]:Bean实例化> 通过工厂方法失败;嵌套异常是> org.springframework.beans.BeanInstantiationException: 失败> 实例化 [org.springframework.web.client.RestTemplate]:循环> 涉及包含 bean 'MyLogBatchConfiguration' 的参考 -> 考虑将工厂方法声明为静态以独立于> 它的包含实例.工厂方法restTemplate"抛出> 例外;嵌套异常是 java.lang.NullPointerException 在> org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor$AutowiredFieldElement.inject(AutowiredAnnotationBeanPostProcessor.java:643)> 在> org.springframework.beans.factory.annotation.InjectionMetadata.inject(InjectionMetadata.java:130)> 在> org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor.postProcessProperties(AutowiredAnnotationBeanPostProcessor.java:399)> 在> org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.populateBean(AbstractAutowireCapableBeanFactory.java:1420)> 在> org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:322)> 在> org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:202)> 在> org.springframework.beans.factory.config.DependencyDescriptor.resolveCandidate(DependencyDescriptor.java:276)> 在> org.springframework.beans.factory.support.DefaultListableBeanFactory.doResolveDependency(DefaultListableBeanFactory.java:1307)> 在> org.springframework.beans.factory.support.DefaultListableBeanFactory.resolveDependency(DefaultListableBeanFactory.java:1227)> 在> org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor$AutowiredFieldElement.inject(AutowiredAnnotationBeanPostProcessor.java:640)> ... 省略了 28 个常见帧 原因:> org.springframework.beans.factory.BeanCreationException: 错误> 创建名为 'restTemplate' 的 bean,在类路径资源中定义> [com/*/configuration/MyLogBatchConfiguration.class]:Bean> 通过工厂方法实例化失败;嵌套异常是> org.springframework.beans.BeanInstantiationException: 失败> 实例化 [org.springframework.web.client.RestTemplate]:循环> 涉及包含 bean 'MyLogBatchConfiguration' 的参考 -> 考虑将工厂方法声明为静态以独立于> 它的包含实例.工厂方法restTemplate"抛出> 例外;嵌套异常是 java.lang.NullPointerException 在> org.springframework.beans.factory.support.ConstructorResolver.instantiate(ConstructorResolver.java:655)> 在> org.springframework.beans.factory.support.ConstructorResolver.instantiateUsingFactoryMethod(ConstructorResolver.java:635)> 在> org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.instantiateUsingFactoryMethod(AbstractAutowireCapableBeanFactory.java:1336)> 在> org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBeanInstance(AbstractAutowireCapableBeanFactory.java:1176)> 在> org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:556)> 在> org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:516)> 在> org.springframework.beans.factory.support.DefaultListableBeanFactory.doResolveDependency(DefaultListableBeanFactory.java:1307)> 在> org.springframework.beans.factory.support.DefaultListableBeanFactory.resolveDependency(DefaultListableBeanFactory.java:1227)> 在> org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor$AutowiredFieldElement.inject(AutowiredAnnotationBeanPostProcessor.java:640)> ... 省略了 50 个常见帧 原因:> org.springframework.beans.BeanInstantiationException: 失败> 实例化 [org.springframework.web.client.RestTemplate]:循环> 涉及包含 bean 'MyLogBatchConfiguration' 的参考 -> 考虑将工厂方法声明为静态以独立于> 它的包含实例.工厂方法restTemplate"抛出> 例外;嵌套异常是 java.lang.NullPointerException 在> org.springframework.beans.factory.support.SimpleInstantiationStrategy.instantiate(SimpleInstantiationStrategy.java:185)> 在> org.springframework.beans.factory.support.ConstructorResolver.instantiate(ConstructorResolver.java:650)> ... 63 个常见帧被省略 原因:> java.lang.NullPointerException: null at> org.springframework.util.MimeType.(MimeType.java:143) 在> org.springframework.http.MediaType.(MediaType.java:433)

我省略了一些中间的堆栈跟踪以保留重要的行.它在 1.5.6 发行版中运行良好.主要原因是最后一行,它与

一起使用<块引用>

MimeType.java MediaType.Java

并抛出空指针异常.如何正确传递 MediaType?我确实在 Eclipse 中看到一个警告:

字段 AbstractJackson2HttpMessageConverter.DEFAULT_CHARSET 是已弃用

感谢任何处理空媒体类型的解决方法.

解决方案

这是 2.2.0 spring-boot 的问题.他们为默认字符集编码设置了弃用.

尝试用以下两种类型替换.json 和文本,

new MediaType("application", "json", MappingJackson2HttpMessageConverter.StandardCharsets.UTF_8))

I am updating spring boot app from 1.5.6.Release to 2.3.5 but getting exception while building project. Following is my error class:

@Configuration
@EnableBatchProcessing
@Import({BatchScheduler.class})
public class MyLogBatchConfiguration {

  private static final Logger log = LoggerFactory.getLogger(MyLogBatchConfiguration.class);

  @Autowired private SimpleJobLauncher jobLauncher;

  @Autowired
  @Qualifier(value = "dataSource1")
  public DataSource mainDataSource;

  @Autowired
  @Qualifier(value = "dataSource2")
  public DataSource tempDataSource;

  @Autowired public StepBuilderFactory stepBuilderFactory;

  @Autowired public JobBuilderFactory jobBuilderFactory;

  
  @Autowired private RestTemplate myRestTemplate;

  @Qualifier(value = "createLocalSessionFactory")
  @Autowired
  private SessionFactory createLocalSessionFactory;

  @Qualifier(value = "createSessionFactory")
  @Autowired
  private SessionFactory createSessionFactory;

  @Bean
  RestTemplate restTemplate(RestTemplateBuilder builder) {
    RestTemplate restTemplate = new RestTemplate();
    List<HttpMessageConverter<?>> converters = restTemplate.getMessageConverters();
    for (HttpMessageConverter<?> converter : converters) {
      if (converter instanceof MappingJackson2HttpMessageConverter) {
        MappingJackson2HttpMessageConverter jsonConverter =
            (MappingJackson2HttpMessageConverter) converter;
        jsonConverter.setObjectMapper(new ObjectMapper());
        jsonConverter.setSupportedMediaTypes(
            ImmutableList.of(
                new MediaType(
                    "application", "json", MappingJackson2HttpMessageConverter.DEFAULT_CHARSET),
                new MediaType(
                    "text", "javascript", MappingJackson2HttpMessageConverter.DEFAULT_CHARSET)));
      }
    }
    return restTemplate;
  }

  @Bean
  public LocalSessionFactoryBean createLocalSessionFactory(
      @Qualifier("dataSource1") DataSource dataSource) {
    LocalSessionFactoryBean factory = new LocalSessionFactoryBean();
    factory.setDataSource(dataSource);
    factory.setPackagesToScan(
        new String[] {
          "X",
          "Y",
          "Z"
        });
    factory.setHibernateProperties(hibernateProperties());
    return factory;
  }

  @Bean
  public LocalSessionFactoryBean createSessionFactory(
      @Qualifier("dataSource2") DataSource dataSource) {
    LocalSessionFactoryBean factory = new LocalSessionFactoryBean();
    factory.setDataSource(dataSource);
    factory.setPackagesToScan(
        new String[] {
          "X",
          "Y",
          "Z"
        });
    factory.setHibernateProperties(hibernateProperties());
    return factory;
  }

I am getting following error : :

> 
org.springframework.beans.factory.UnsatisfiedDependencyException:
> Error creating bean with name 'MyLogBatchConfiguration': Unsatisfied
> dependency expressed through field 'myRestTemplate'; nested exception
> is org.springframework.beans.factory.UnsatisfiedDependencyException:
> Error creating bean with name 'batchConfiguration': Unsatisfied
> dependency expressed through field 'myRestTemplate'; nested exception
> is org.springframework.beans.factory.BeanCreationException: Error
> creating bean with name 'restTemplate' defined in class path resource
> [com//configuration/MyLogBatchConfiguration.class]: Bean instantiation
> via factory method failed; nested exception is
> org.springframework.beans.BeanInstantiationException: Failed to
> instantiate [org.springframework.web.client.RestTemplate]: Circular
> reference involving containing bean 'MyLogBatchConfiguration' -
> consider declaring the factory method as static for independence from
> its containing instance. Factory method 'restTemplate' threw
> exception; nested exception is java.lang.NullPointerException at
> org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor$AutowiredFieldElement.inject(AutowiredAnnotationBeanPostProcessor.java:643)
> at
> org.springframework.beans.factory.annotation.InjectionMetadata.inject(InjectionMetadata.java:130)
> at
> org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor.postProcessProperties(AutowiredAnnotationBeanPostProcessor.java:399)
> at
> org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.populateBean(AbstractAutowireCapableBeanFactory.java:1420)
> at
> org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:593)
> at
> org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:516)
> at
> org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:324)
> ] at
> sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
> at java.lang.reflect.Method.invoke(Method.java:498) at
> org.springframework.boot.loader.MainMethodRunner.run(MainMethodRunner.java:49)
> at org.springframework.boot.loader.Launcher.launch(Launcher.java:107)
> at org.springframework.boot.loader.Launcher.launch(Launcher.java:58)
> at
> org.springframework.boot.loader.JarLauncher.main(JarLauncher.java:88)
> Caused by:
> org.springframework.beans.factory.UnsatisfiedDependencyException:
> Error creating bean with name 'batchConfiguration': Unsatisfied
> dependency expressed through field 'myRestTemplate'; nested exception
> is org.springframework.beans.factory.BeanCreationException: Error
> creating bean with name 'restTemplate' defined in class path resource
> [com//configuration/MyLogBatchConfiguration.class]: Bean instantiation
> via factory method failed; nested exception is
> org.springframework.beans.BeanInstantiationException: Failed to
> instantiate [org.springframework.web.client.RestTemplate]: Circular
> reference involving containing bean 'MyLogBatchConfiguration' -
> consider declaring the factory method as static for independence from
> its containing instance. Factory method 'restTemplate' threw
> exception; nested exception is java.lang.NullPointerException at
> org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor$AutowiredFieldElement.inject(AutowiredAnnotationBeanPostProcessor.java:643)
> at
> org.springframework.beans.factory.annotation.InjectionMetadata.inject(InjectionMetadata.java:130)
> at
> org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor.postProcessProperties(AutowiredAnnotationBeanPostProcessor.java:399)
> at
> org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.populateBean(AbstractAutowireCapableBeanFactory.java:1420)
> at
> org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:322)
> at
> org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:202)
> at
> org.springframework.beans.factory.config.DependencyDescriptor.resolveCandidate(DependencyDescriptor.java:276)
> at
> org.springframework.beans.factory.support.DefaultListableBeanFactory.doResolveDependency(DefaultListableBeanFactory.java:1307)
> at
> org.springframework.beans.factory.support.DefaultListableBeanFactory.resolveDependency(DefaultListableBeanFactory.java:1227)
> at
> org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor$AutowiredFieldElement.inject(AutowiredAnnotationBeanPostProcessor.java:640)
> ... 28 common frames omitted Caused by:
> org.springframework.beans.factory.BeanCreationException: Error
> creating bean with name 'restTemplate' defined in class path resource
> [com/*/configuration/MyLogBatchConfiguration.class]: Bean
> instantiation via factory method failed; nested exception is
> org.springframework.beans.BeanInstantiationException: Failed to
> instantiate [org.springframework.web.client.RestTemplate]: Circular
> reference involving containing bean 'MyLogBatchConfiguration' -
> consider declaring the factory method as static for independence from
> its containing instance. Factory method 'restTemplate' threw
> exception; nested exception is java.lang.NullPointerException at
> org.springframework.beans.factory.support.ConstructorResolver.instantiate(ConstructorResolver.java:655)
> at
> org.springframework.beans.factory.support.ConstructorResolver.instantiateUsingFactoryMethod(ConstructorResolver.java:635)
> at
> org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.instantiateUsingFactoryMethod(AbstractAutowireCapableBeanFactory.java:1336)
> at
> org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBeanInstance(AbstractAutowireCapableBeanFactory.java:1176)
> at
> org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:556)
> at
> org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:516)
> at
> org.springframework.beans.factory.support.DefaultListableBeanFactory.doResolveDependency(DefaultListableBeanFactory.java:1307)
> at
> org.springframework.beans.factory.support.DefaultListableBeanFactory.resolveDependency(DefaultListableBeanFactory.java:1227)
> at
> org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor$AutowiredFieldElement.inject(AutowiredAnnotationBeanPostProcessor.java:640)
> ... 50 common frames omitted Caused by:
> org.springframework.beans.BeanInstantiationException: Failed to
> instantiate [org.springframework.web.client.RestTemplate]: Circular
> reference involving containing bean 'MyLogBatchConfiguration' -
> consider declaring the factory method as static for independence from
> its containing instance. Factory method 'restTemplate' threw
> exception; nested exception is java.lang.NullPointerException at
> org.springframework.beans.factory.support.SimpleInstantiationStrategy.instantiate(SimpleInstantiationStrategy.java:185)
> at
> org.springframework.beans.factory.support.ConstructorResolver.instantiate(ConstructorResolver.java:650)
> ... 63 common frames omitted Caused by:
> java.lang.NullPointerException: null at
> org.springframework.util.MimeType.(MimeType.java:143) at
> org.springframework.http.MediaType.(MediaType.java:433)

I have omitted some in-between stack trace to keep important lines. It was working fine in 1.5.6 Release version. The main reason is the last line, where it works with

MimeType.java MediaType.Java

and throws Null Pointer Exception.How can I pass MediaTypes correctly ? I do see a warning in eclipse as :

The field AbstractJackson2HttpMessageConverter.DEFAULT_CHARSET is 
 deprecated

Any workaround of handling Null Media type is appreciated.

解决方案

This is problem from 2.2.0 spring-boot. They set deprecation for default charset encoding.

Try replacing with followingFor both type. json and text,

new MediaType("application", "json", MappingJackson2HttpMessageConverter. StandardCharsets.UTF_8))

这篇关于RestTemplate Spring boot 中的 NullPointerException MediaType的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆