如何在改造中发送byte []数组

use*_*826 5 java spring retrofit

如何在改装调用中发送byte []数组.我只需要通过byte []发送.当我试图发送改装电话时,我得到了这个例外.

retrofit.RetrofitError:retrofit.converter.ConversionException:com.google.gson.JsonSyntaxException:java.lang.IllegalStateException:期望一个字符串但在第1行第2列是BEGIN_OBJECT

我可以使用改造来进行呼叫的方式是什么.

我只是将字节数组作为封装在对象类中的ByteMessage传递.

public class ByteMessage {
private byte[] byteArray;

byte[] getByteArray(){
return byteArray;
}
setByteArray(byte[] bytes){
byteArray=bytes;
}
}


@POST("/send")
sendBytes(ByteMesssage msg);


server side

sendBytes(ByteMessage msg){
byte[] byteArray=msg.getByte();
...doSomething... 
}
Run Code Online (Sandbox Code Playgroud)

我无法在堆栈溢出或谷歌上找到资源,通过改进调用传递字节数组的正确解决方案.

任何人都可以帮助这个.

谢谢Dhiren

Igo*_*iev 10

为此您可以使用 TypedByteArray

您的Retrofit服务将如下所示:

@POST("/send")
void upload(@Body TypedInput bytes, Callback<String> cb);
Run Code Online (Sandbox Code Playgroud)

您的客户代码:

    byte[] byteArray = ...
    TypedInput typedBytes = new TypedByteArray("application/octet-stream",  byteArray);
    remoteService.upload(typedBytes, new Callback<String>() {
        @Override
        public void success(String s, Response response) {
            //Success Handling
        }

        @Override
        public void failure(RetrofitError retrofitError) {
            //Error Handling
        }
    }); 
Run Code Online (Sandbox Code Playgroud)

"application/octet-stream" - 而不是这个MIME-TYPE,您可能想要使用您的数据格式类型.您可以在此处找到详细信息:http: //www.freeformatter.com/mime-types-list.html

和Spring MVC控制器(如果你需要):

@RequestMapping(value = "/send", method = RequestMethod.POST)
public ResponseEntity<String> receive(@RequestBody byte[] data) {
    //handle data
    return new ResponseEntity<>(HttpStatus.CREATED);
}
Run Code Online (Sandbox Code Playgroud)


小智 7

对于改造2:

@POST("/send")
void upload(@Body RequestBody bytes, Callback<String> cb);
Run Code Online (Sandbox Code Playgroud)

用法:

byte[] params = ...
RequestBody body = RequestBody.create(MediaType.parse("application/octet-stream"), params);
remoteService.upload(body, new Callback<String>() {
    @Override
    public void success(String s, Response response) {
        //Success Handling
    }

    @Override
    public void failure(RetrofitError retrofitError) {
        //Error Handling
    }
}); 
Run Code Online (Sandbox Code Playgroud)