【问题标题】:Failed to write HTTP message: org.springframework.http.converter.HttpMessageNotWritableException: No converter found for return value of type:无法写入 HTTP 消息:org.springframework.http.converter.HttpMessageNotWritableException:未找到类型返回值的转换器:
【发布时间】:2017-11-15 18:51:12
【问题描述】:

我正在尝试公开 REST 服务,但是当我从 POSTMAN 中点击它时,我得到了以下信息:

警告:无法写入 HTTP 消息:org.springframework.http.converter.HttpMessageNotWritableException:未找到类型返回值的转换器:类 java.util.ArrayList

我还包括以下所需的 jar 文件:

<dependency>
        <groupId>com.fasterxml.jackson.core</groupId>
        <artifactId>jackson-databind</artifactId>
        <version>2.9.1</version>
    </dependency>
    <dependency>
        <groupId>com.fasterxml.jackson.core</groupId>
        <artifactId>jackson-core</artifactId>
        <version>2.9.1</version>
    </dependency>
    <dependency>
        <groupId>com.fasterxml.jackson.core</groupId>
        <artifactId>jackson-annotations</artifactId>
        <version>2.9.1</version>
    </dependency>

这是我的 REST 控制器代码:

@RestController
@RequestMapping("/MayankAPI")
public class TestRestAPI {
@RequestMapping(value="/sayHello" , method = RequestMethod.POST)
public TestPojo postData(@RequestBody String payload) {
  System.out.println("Hello post"+payload);
  TestPojo payload1=new TestPojo();
  payload1.setStudentName("Jack");
  return payload1;
}
@RequestMapping(value="/sayHello" , method = RequestMethod.GET)
public List<TestPojo> getData(String payload) {
  System.out.println("Hello get"+payload);
  List<TestPojo> payload1=new ArrayList<TestPojo>();
  TestPojo tp = new TestPojo();
  tp.setStudentName("Jack");
  payload1.add(tp);
  return payload1;
}

这是我想要返回的 bean:

public class TestPojo {

  private String studentName;
  private String studentId;

  public String getStudentName() {
    return studentName;
  }

  public void setStudentName(String studentName) {
    this.studentName = studentName;
  }

  public String getStudentId() {
    return studentId;
  }

  public void setStudentId(String studentId) {
    this.studentId = studentId;
  }
}

请帮助我哪里做错了。

【问题讨论】:

  • 就在那里,在您的错误消息中,“ArrayList 无法转换...”。在返回之前尝试在 ArrayList 上使用 .ToArray() 函数。
  • 但是为什么我要把它转换成数组,因为我想返回列表。即使在那种情况下它也不起作用。
  • 我不熟悉Java中的JSON转换,但从错误来看,它似乎无法将您的ArrayList转换为JSON字符串。
  • 也看here。您可以尝试公开您的对象属性吗?这可能是吸气剂的问题。
  • 内容类型协商可能会失败。确保您已注册MappingJackson2HttpMessageConverter

标签: spring spring-mvc spring-restcontroller


【解决方案1】:

我知道为时已晚,但仍然 替代解决方案: 您需要将 Spring 项目启用为 Web MVC,如下所示:

@Configuration @EnableWebMvc @ComponentScan("basePackages = com.test") public class MiBenefitConfiguration { }

【讨论】:

    【解决方案2】:

    发生这种情况是因为 MappingJackson2HttpMessageConverter 未在我的应用配置文件中注册,如下所示。

    @Configuration
    @ComponentScan("basePackages = com.test")
    public class MiBenefitConfiguration extends WebMvcConfigurationSupport{
    
      @Bean
      public ObjectMapper getObjectMapper() {
        return new ObjectMapper();
      }
    
      @Bean
      public MappingJackson2HttpMessageConverter messageConverter() {
        MappingJackson2HttpMessageConverter converter = new MappingJackson2HttpMessageConverter();
        converter.setObjectMapper(getObjectMapper());
        return converter;
      }
    
      @Override
      public void configureMessageConverters(List<HttpMessageConverter<?>> converters) {
        converters.add(messageConverter());
        addDefaultHttpMessageConverters(converters);
      }
    }
    

    【讨论】:

      猜你喜欢
      • 2018-06-20
      • 2016-08-27
      • 2019-04-08
      • 2019-09-18
      • 1970-01-01
      • 1970-01-01
      • 2019-11-04
      • 2019-12-18
      • 1970-01-01
      相关资源
      最近更新 更多