2017-01-05 6 views
0

私widgets.proto:私のprotobufをシリアル化してみませんか?

option java_package = "example"; 
option java_outer_classname = "WidgetsProtoc"; 

message Widget { 
required string name = 1; 
required int32 id = 2; 
} 

message WidgetList { 
repeated Widget widget = 1; 
} 

私の残りの部分:(パス:/ウィジェット)

@GET 
@Produces("application/x-protobuf") 
public WidgetsProtoc.WidgetList getAllWidgets() { 
    Widget widget1 = 
      Widget.newBuilder().setId(1).setName("testing").build(); 
    Widget widget2 = 
      Widget.newBuilder().setId(100).setName("widget 2").build(); 
    System.err.println("widgets1: " + widget1); 
    System.err.println("widgets2: " + widget2); 
    WidgetsProtoc.WidgetList list = WidgetsProtoc.WidgetList.newBuilder().addWidget(widget1).addWidget(widget2).build(); 
    System.err.println("list: " + list.toByteArray()); 


    return list; 
} 

と私は郵便配達を使用するときに私は、この応答を得る:

(emptyline)  
(emptyline) 
testing 
(emptyline) 
widget 2d 

これは正常です?私はバイト配列を送信するためにその良いと思った...しかし、何をシリアル化しないことを少し奇妙です

@Override 
public void writeTo(WidgetsProtoc.WidgetList widgetList, Class<?> type, Type genericType, Annotation[] annotations, MediaType mediaType, MultivaluedMap<String, Object> httpHeaders, OutputStream entityStream) throws IOException, WebApplicationException { 
    entityStream.write(widgetList.toByteArray()); 
} 

...:私は...私のmessagebodywriterクラスで私はこのようなのwriteTo上書き本当にないと思います。私だけのIDです...助けてくれてありがとう:

+0

あなたはこのMEDIATYPEが正しいですか?代わりに@Produces( "application/octet-stream")を行うとどうなりますか? – hakamairi

+0

オクテットストリームに書き込むと同じです – seherez

+0

フレームワークを使用していますか?何がWidgetsProtoc.WidgetListのシリアル化の世話をしていますか? – hakamairi

答えて

0

これはすでにバイナリです。 メッセージは名前とIDで構成されていますが、表示されるのは名前だけです。 私は、ブラウザのGET呼び出しから「テスト」ファイルとしてレスポンスを保存するときに、私が表示されます何が:

$ cat test 



testing 


widget 2d%       

あなたは猫がそれを表示することがかろうじてできること見ることができますが、それへのより多くのコンテンツがあります。

は今、私はそれを開いた場合、私は、バイナリデータを表示するには、ポストマンを信用しないだろう、私は一般的に

0A 0B 0A 07 74 65 73 74 69 6E 67 10 01 0A 0C 0A 08 77 69 64 67 65 74 20 32 10 64 

のうち多くを得ることができます(Ubuntuのでバイナリエディタ)を祝福します。あなたはそれを解読する方法を知る必要があり、明らかにPostmanはそうではありません。ここ

そして、最終的な証拠です:

$ cat test | protoc --decode_raw 
1 { 
    1: "testing" 
    2: 1 
} 
1 { 
    1: "widget 2" 
    2: 100 
} 
+0

waoooh ....ありがとう...私はWindows用の16進エディタをダウンロードしています.... ....私はそれがバイナリであるとは思っていません.. 。 ありがとうございました :) – seherez

関連する問題