【问题标题】:Could not write JSON: No serializer found for class java.io.FileDescriptor and no properties discovered to create BeanSerializer无法写入 JSON:没有为类 java.io.FileDescriptor 找到序列化程序,也没有发现用于创建 BeanSerializer 的属性
【发布时间】:2016-02-17 19:58:47
【问题描述】:

我正在尝试使用 Spring REST 模板(它接受帖子,但不接受 JSON)通过 Spring MultiPart 文件上传将 https 发布到站点。

收到以下错误,这样做时,

org.springframework.http.converter.HttpMessageNotWritableException:无法写入 JSON:找不到类 java.io.FileDescriptor 的序列化程序,也没有发现用于创建 BeanSerializer 的属性。

MultiValueMap<String, Object> formData = new LinkedMultiValueMap<String, Object>();
formData.add("NUMBER", "ABC");
formData.add("ID", "123");
formData.add("FILE",file); // this is spring multipart file
HttpHeaders headers = new HttpHeaders();
headers.set("Content-Type", "multipart/form-data"); 
headers.set("Accept", "text/plain"); 
HttpEntity<MultiValueMap<String, Object>> requestEntity = new HttpEntity<MultiValueMap<String, Object>>(formData, headers);
RestTemplate restTemplate = getRestTemplate();

String result  = restTemplate.postForObject(uploadUri, requestEntity, String.class);

【问题讨论】:

  • RestTemplate restTemplate = new RestTemplate(); ObjectMapper newObjectMapper = new ObjectMapper(); newObjectMapper.configure(SerializationFeature.FAIL_ON_EMPTY_BEANS,false); MappingJackson2HttpMessageConverter mappingJacksonHttpMessageConverter=new MappingJackson2HttpMessageConverter();restTemplate.getMessageConverters().add(new FormHttpMessageConverter()); restTemplate.getMessageConverters().add(mappingJacksonHttpMessageConverter); restTemplate.getMessageConverters().add(new StringHttpMessageConverter());返回休息模板;
  • 使用附加信息编辑问题并删除评论...

标签: java spring rest post


【解决方案1】:

更新 gradle 插件到版本

id "io.spring.dependency-management" version "1.0.9.RELEASE"

帮了我

【讨论】:

    【解决方案2】:

    我也遇到了同样的问题,当我使用 ByteArrayResource 而不是 FileSystem 资源时,我能够解决这个问题。我使用 ByteArrayResource 将多部分文件的字节内容复制到了 httprequest 实体中。

    Iterator<String> itr = request.getFileNames();
    MultipartFile file = request.getFile(itr.next());
    //Set the headers
    ................
    formData .add("files", new ByteArrayResource(file.getBytes()));
    

    您可以参考此link 以获取更多信息

    【讨论】:

      猜你喜欢
      • 2018-02-05
      • 1970-01-01
      • 2017-05-27
      • 1970-01-01
      • 2012-10-25
      • 2014-11-21
      • 2021-06-26
      • 2020-04-22
      • 2014-09-19
      相关资源
      最近更新 更多