2016-10-21 37 views
3

restサービスにbyte []を1つとして含むいくつかのパラメータを渡そうとしています。私がパラメータを消費してFileを構築するServiceメソッドでは...ファイルが壊れています。以下 は私のコードです:Spring Rest APIのパラメータとしてバイト配列を渡す方法

public class MultiParameters { 
    @JsonProperty(value="strName") 
    public String strName; 
    @JsonProperty(value="in") 
    public byte[] in; 
    public String strName2; 


    public String getStrName2() { 
     return strName2; 
    } 

    public void setStrName2(String strName2) { 
     this.strName2 = strName2; 
    } 

    public String getStrName() { 
     return strName; 
    } 

    public void setStrName(String strName) { 
     this.strName = strName; 
    } 

    public byte[] getIn() { 
     return in; 
    } 

    public void setIn(byte[] in) { 
     this.in = in; 
    } 

はRestController:

@RequestMapping(value= "/upload", method = RequestMethod.POST) 
public void upload(@RequestBody MultiParameters obj){   
    try { 
     System.out.println("str name : "+obj.getStrName()); 
     System.out.println("str name2 : "+obj.getStrName2()); 
     System.out.println("bytes lenghts : "+obj.getIn()); 

     FileOutputStream fos = new FileOutputStream(new File("D:\\Test.txt")); 
     fos.write(obj.getIn()); 
     fos.close(); 
    } catch (Exception e) { 
     // TODO Auto-generated catch block 
     e.printStackTrace(); 
    } 
} 

いずれかが、私はこっちにエラーが何であるかを知っていることはできますか?

入力をPost Manを使用してJSONの形式でRAWデータとして渡して、サービスをテストしています。

ありがとうございました。

+0

public void setIn(byte [] in)この関数のbyte []? &uは、wrtitingの前にobj.geInのサイズを表示しましたか? –

+0

はい。 Sizeを適切に印刷しています。 – Raghav

+0

fos.flush()を追加してみてください。 –

答えて

1

バイト配列をBase64文字列にエンコードし、コントローラで受信した後にバイト配列にデコードして戻すことができます。

+0

私はすでに同じことを行っていますが、運がいいわけではありません。これは私がやったことです: – Raghav

+0

@RequestMapping(値= "/ byteUpload"、メソッド= RequestMethod.POST) \t public void getValues(@RequestParam(value = "str1 "、required = true)String str1、@RequestParam(value =" str2 "、必須= true)文字列str2) \t { \t \t byte [] bytes = Base64.decodeBase64(str1); \t \t System.out.println(str1); \t \t System.out.println(str2); \t \t試み{ \t \t \t \t \tたFileOutputStreamのFOS =新しいたFileOutputStream(新しいファイル( "D:\\ Test.txtを")); \t \t \t fos.write(bytes); \t \t \t fos.close(); \t \t \t \t \t} \t \tキャッチ(例外e) \t \t { \t \t \t \t \t} \t} – Raghav

1

コードでは、ファイルをアップロードしようとしています。その場合、単にファイルをアップロードして、以下の例のように1つの顧客オブジェクトと1つのファイルオブジェクトを受け入れることができます。

@RequestMapping(value = "/registration/uploadFile", method = RequestMethod.POST) 
public Customer saveFile(@RequestPart("customer") @Valid Customer customer, @RequestPart("file") @Valid MultipartFile file) { 
    return customerService.saveFile(customer, file); 
} 
+0

あなたと同意。しかし、いくつかの制限のため、私はMultipartFileオプションを使用することができません。提案ありがとう。 – Raghav

関連する問題