我使用來自C++客戶端的libcurl爲了提交發布數據到java服務器。 由於某些原因,post數據(protobuf SerializeToString)無法在服務器端解析。Java服務器無法解析來自protobuf byte []
這裏是客戶端部分:
string str;
ProtoBufMessage.SerializeToString(&str);
curl_easy_setopt(m_curl_handle, CURLOPT_POSTFIELDS, str);
curl_easy_setopt(m_curl_handle, CURLOPT_POSTFIELDSIZE, str.size());
這裏是服務器上的Java代碼:
@Produces(MediaType.APPLICATION_OCTET_STREAM)
@Consumes(MediaType.APPLICATION_OCTET_STREAM)
public @ResponseBody
byte[] updateStatus(@RequestBody byte[] message) {
try {
ProtobufMessage pbMessage = ProtobufMessage.parseFrom(message);
...
}
當我將郵件轉換爲字符串,我得到以下價值 - 「%C3%B4%C3%BA%29%00%00%00%00%00%C3%BD%C3%BD%C3%BD%C3%BD%C2%AB%C2%AB%C2%AB% C2%AB%C2%AB%C2%AB =「
但是,客戶端正在發送以下值 - 」\ b \ x1 \ x1a \ xe \ n \ x5Hello \ x12 \ x5w orld「
我相信它與發送字節的編碼有某種關係,但是我怎麼控制它呢?
另外,這裏是我在服務器端解析消息時出現的異常 - com.google.protobuf.InvalidProtocolBufferException:協議消息結束標記標記與預期標記不匹配。
我將其更改爲str.data(),但真正的問題與C++和java之間的序列化有關(所以我最終編譯了該消息的base64編碼)。謝謝 – user2895378 2014-10-19 12:55:26