2016-06-13 4 views
0

おはようございます、 私のマイクロサービスとスプリングブートアプリケーションでは、ファイルアップロードエンドポイントで別のマイクロサービスを使用するフロントエンドの従業員マイクロサービスがあります。 呼び出しサービスはスプリングレストコントローラに基づいており、SpringブートアプリケーションでRestTemplateを使用してファイルアップロードエンドポイントを消費しようとしています。一言で言えば、PDFファイルをアップロードしようとしています。Multipartフォームデータを送信し、RestTemplate SpringブートでPDFをアップロードする方法

私はSO、次のポストを探求してきたが、私のために働いていないその:私は郵便配達でこれをテストし、次のエラー取得しています

jackson disable fail_on_empty_beans

org.springframework.httpを。 converter.HttpMessageNotWritableException:コンテンツを書き込めませんでした:クラスjava.io.FileDescriptorのシリアライザが見つかりませんでした。BeanSerializerを作成するためのプロパティが見つかりませんでした。

レストコントローラ############
 @RestController 
   
     @RequestMapping(path = “/employee”) 
   

     public class EmployeeController { 
      private EmployeeService empService; 

      @RequestMapping(value =“/emp/load”, method = RequestMethod.POST) 

public 
      @ResponseBody 
      ResponseEntity<byte[]> handleFileUpload(
  @RequestParam("file") MultipartFile file, @RequestParam String a, @RequestParam String b, @RequestParam String c, @RequestParam String d, @RequestParam String e) throws Exception {
   

return empService.handleFileUpload(file, a, b, c, d, e);
  

      } 
     } 

サービス実装 -

すべてのヘルプは以下pleasee ....

が主成分であるが理解されよう

 @Service
    
    public class EmployeeServiceImpl implements EmployeeService{
   
  @Value(“${emp.base.url}")
     

    private String EMP_BASE_URI;
  

public ResponseEntity<byte[]>handleFileUpload(MultipartFile file, String a, String b, String c, String d, String e) {
  

final String uri = EMP_BASE_URI + "/upload";
  

      RestTemplate restTemplate = getMappedRestTemplate();
  

      MultiValueMap<String, Object> params = new LinkedMultiValueMap<String, Object>();
  

      params.add("file", file);
  

      params.add(“a”, a); 
      
  
      params.add(“b”, b);
  

      params.add(“c”, c); 
      
  
      params.add(“d”, d);
  

      params.add(“e”, e); 

      HttpHeaders headers = new HttpHeaders();
  

      headers.set("Content-Type", "multipart/form-data"); 

      ResponseEntity<byte[]> response = restTemplate.exchange(uri, HttpMethod.POST, new HttpEntity<>(params, headers), byte[].class); 

      return new ResponseEntity<>(response.getBody(), response.getStatusCode()); 
     } 
    
   
   
     




    private RestTemplate getMappedRestTemplate(){
   

       RestTemplate restTemplate = new RestTemplate();
   

       ObjectMapper newObjectMapper = new ObjectMapper(); 

       
  newObjectMapper.configure(SerializationFeature.FAIL_ON_EMPTY_BEANS,false); 
       
   
       newObjectMapper.setVisibility(PropertyAccessor.FIELD, JsonAutoDetect.Visibility.ANY);
   

       MappingJackson2HttpMessageConverter mappingJacksonHttpMessageConverter=new MappingJackson2HttpMessageConverter(); 

       FormHttpMessageConverter formConvertor = new FormHttpMessageConverter(); 
       
   
       restTemplate.getMessageConverters().add(formConvertor);
   

       restTemplate.getMessageConverters().add(mappingJacksonHttpMessageConverter); 

       restTemplate.getMessageConverters().add(new StringHttpMessageConverter()); 
       
   
       return restTemplate;
   
      } 
    } 
私は次のようなエラーになっています:

は、HTTPメッセージの書き込みに失敗しました:org.sprinをgframework.http.converter.HttpMessageNotWritableException:コンテンツを書き込めませんでした:java.io.FileDescriptorクラスのシリアライザが見つかりませんでした。例外を回避するためにBeanSerializerを作成するためのプロパティが見つかりませんでした(SerializationFeature.FAIL_ON_EMPTY_BEANSを無効にします))(参照チェーン:org.springframework。 web.multipart.support.StandardMultipartFile ["inputStream"] - > java.io.FileInputStream ["fd"]);ネストされた例外はcom.fasterxml.jackson.databind.JsonMappingExceptionです。クラスjava.io.FileDescriptorのシリアライザが見つかりません。例外を回避するためにBeanSerializerを作成するためのプロパティは検出されません(SerializationFeature.FAIL_ON_EMPTY_BEANSを無効にします))(参照チェーン:org.springframework。 web.multipart.support.StandardMultipartFile ["inputStream"] - > java.io.FileInputStream ["fd"]

ご了承ください。 私はこの一日中立ち往生しています。

答えて

0

Iは、次のメソッドのシグネチャを使用して要求本体にJSONとして(すなわちbyte[]バイトストリームとして、PDFファイルを含む)のparamsを送信するために行っている:

@RequestMapping(value = "/upload", method = RequestMethod.POST) 
@ResponseStatus(HttpStatus.CREATED) 
public @ResponseBody Long handleFileUpload(@Valid @RequestBody Invoice uploadedInvoice){ 
    ... 
} 
関連する問題