How to send byte[] array in retrofit

For this purpose you can use TypedByteArray

Your Retrofit service will look like this:

@POST("/send")
void upload(@Body TypedInput bytes, Callback<String> cb);

Your client code:

    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
        }
    }); 

"application/octet-stream" - instead this MIME-TYPE, you maybe want to use your data format type. Detail information you can find here: http://www.freeformatter.com/mime-types-list.html

And Spring MVC controller (if you need one):

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

For retrofit2:

@POST("/send")
void upload(@Body RequestBody bytes, Callback<String> cb);

usage:

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
    }
});