I could say I'm new to this whole programming world!
The case is that I'm doing a project with JHipster integrated with Android, using Retrofit2.
Well, what I'm trying to do is save an image to the database (MySQL), which is saved on a byte[] field.
That's what I have on the User entity in backend:
@Entity
@Table(name = "usuario")
public class Usuario implements Serializable {
    private static final long serialVersionUID = 1L;
    @Id
    @GeneratedValue(strategy = GenerationType.AUTO)
    private Long id;
    @NotNull
    @Column(name = "name", nullable = false)
    private String name;
    @Lob
    @Column(name = "image")
    private byte[] image;
    @Column(name = "image_content_type")    
    private String imageContentType;
    public Long getId() {
        return id;
    }
    public void setId(Long id) {
        this.id = id;
    }
    public String getName() {
        return name;
    }
    public void setName(String name) {
        this.name = name;
    }
    public byte[] getImage() {
        return image;
    }
    public void setImage(byte[] image) {
        this.image = image;
    }
    public String getImageContentType() {
        return imageContentType;
    }
    public void setImageContentType(String imageContentType) {
        this.imageContentType = imageContentType;
    }
    @Override
    public boolean equals(Object o) {
        if (this == o) {
            return true;
        }
        if (o == null || getClass() != o.getClass()) {
            return false;
        }
        Usuario usuario = (Usuario) o;
        if(usuario.id == null || id == null) {
            return false;
        }
        return Objects.equals(id, usuario.id);
    }
    @Override
    public int hashCode() {
        return Objects.hashCode(id);
    }
    @Override
    public String toString() {
        return "Usuario{" +
            "id=" + id +
            ", name='" + name + "'" +
            ", image='" + image + "'" +
            ", imageContentType='" + imageContentType + "'" +
            '}';
    }
}
And this is what I have on Android Class:
public class Usuario {
    Long id;
    String name;
    String image;
    String imageContentType;
    public Usuario() {
    }
    public Usuario(Long id, String name, String image) {
        this.id = id;
        this.name = name;
        this.image = image;
    }
    public Long getId() {
        return id;
    }
    public void setId(Long id) {
        this.id = id;
    }
    public String getName() {
        return name;
    }
    public void setName(String name) {
        this.name = name;
    }
    public String getImage() {
        return image;
    }
    public void setImage(String image) {
        this.image = image;
    }
    public String getImageContentType() {
        return imageContentType;
    }
    public void setImageContentType(String imageContentType) {
        this.imageContentType = imageContentType;
    }
I tried to save the image on a Byte[] in Android too, but since I can't get the response when I'm trying to get the user's information (seems to be a problem with the JSON file that I receive from backend, I receive an Array when Android wants an String), I have to use an String. So I've implemented a method on the REST resource to convert that String to Byte[], which looks like the following:
@RequestMapping(value = "/usuarios/{img}/{id}",
    method = RequestMethod.PUT,
    produces = MediaType.APPLICATION_JSON_VALUE)
@Timed
public ResponseEntity<Usuario> convertImage(@Valid @RequestBody Usuario usuario, @RequestBody String img, @RequestBody Long id) {
    log.debug("REST request to get Usuario : {}", id, img);
    usuario = usuarioRepository.findOne(id);
    byte[] b = img.getBytes();
    usuario.setImage(b);
    Usuario result = usuarioRepository.save(usuario);
    return ResponseEntity.ok()
        .headers(HeaderUtil.createEntityUpdateAlert("usuario", usuario.getId().toString()))
        .body(result);
}
I guess I'm not correctly using the @RequestMapping, but somehow from JHipster CRUD using the API that method works fine, the problems seems to be on the Android/Retrofit2 methods, which look like this:
That's the service:
@Multipart
@PUT("/api/usuarios/{id}/{img}")
Call<Usuario> convertImage(
        @Header("Authorization") String Authorization,
        @Part("img") String img, @Part("id") Long id
);
What I have on the UserManager:
public synchronized void convertImage(final UsuarioCallback usuarioCallback, String img, Long id) {
    Call <Usuario> call = usuarioService.convertImage(UserLoginManager.getInstance(context).getBearerToken(), img, id);
    call.enqueue(new Callback<Usuario>() {
        @Override
        public void onResponse(Call<Usuario> call, Response<Usuario> response) {
            int code = response.code();
            if (code == 200 || code == 201) {
            } else {
                usuarioCallback.onFailure(new Throwable("ERROR" + code + ", " + response.raw().message()));
            }
        }
And this is how I'm calling and transfering the information:
ByteArrayOutputStream stream = new ByteArrayOutputStream();
    bitmap.compress(Bitmap.CompressFormat.PNG, 90, stream); 
    byte[] byte_arr = stream.toByteArray();
    String imgString = Base64.encodeToString(byte_arr,
            Base64.DEFAULT);
    Usuario usuario = new Usuario();
    usuario.setId(Long.parseLong("1"));
    Long id = usuario.getId();
    UsuarioManager.getInstance(view.getContext()).convertImage(EditProfile.this, imgString, id);
With all this I'm getting the error I show in the title, so I don't really know what can be wrong with this.
I guess that's all the information I should provide, I'm sorry if I'm missing something but I'm kinda lost with this error and I've been stucked here for weeks.
Thanks you beforehand!
 
     
    