Serializar Model com chave estrangeira int (SQlite) e inserir no Postgreesql como Objeto via código Java

Boa tarde!

É a primeira vez que trabalho com webservice e estou com algumas dúvidas.

Tenho um aplicativo feito em java rodando no Android, utilizo SQlite (Room), retrofit2 (Gson). Consigo serializar o Model “RelatorioMotorizado” e enviá-lo para o sistema servidor também feito em java e recebo a seguinte String visualizada no console:

"auxiliar1":3,"auxiliar2":2,"data":"2020-06-29","encarregado":2,"horaFinal":"06:00","horaInicial":"18:00","kmFinal":"189","kmInicial":"123","motorista":4,"id":1,"vtr":2}

Estou recebendo a mensagem Expected BEGIN_OBJECT but was STRING at line 1 column 15 path $.auxiliar1

Os campos auxiliar1, auxiliar2, encarregado, motorista e vtr são chaves estrangeiras entendidas como Objetos pelo java. Como eu poderia fazer essa conversão para inserir esse json no banco com esses campos como objetos e não como String?

Att.

nao sei como esta estruturado o seu java. Mas no geral, essa conversao era para ser automatica, e nesse caso voce registraria um converter que receria a string e transformaria num objeto. Mas isso seria usando JSF ou spring mvc.

Obrigado @thimor por responder.

Esse é o Model:

@Entity(foreignKeys = {
    @ForeignKey(entity = Viatura.class, parentColumns = "id", childColumns = "viaturaId"),
    @ForeignKey(entity = Funcionario.class, parentColumns = "func_id", childColumns = "motoristaId")
})
public class RelatorioMotorizado implements Parcelable {

@PrimaryKey(autoGenerate = true)
@SerializedName("id")
private int relMot_id;
@SerializedName("data")
private String data;
@SerializedName("horaInicial")
private String horaInicial;
@SerializedName("horaFinal")
private String horaFinal;
@SerializedName("kmInicial")
private String kmInicial;
@SerializedName("kmFinal")
private String kmFinal;
@SerializedName("observacoes")
private String observacoes;
@SerializedName("vtr")
private int viaturaId;
@SerializedName("motorista")
private Integer motoristaId;
@SerializedName("encarregado")
private Integer encarregadoId;
//@ColumnInfo(name = "auxiliar1")
@SerializedName("auxiliar1")
private Integer auxiliar1Id;
@SerializedName("auxiliar2")
private Integer auxiliar2Id; 

Método que passa o objeto ao service:

public void addUser(RelatorioMotorizado u){
    Call<RelatorioMotorizado> call = userService.addUser(u);
    call.enqueue(new Callback<RelatorioMotorizado>() {
        @Override
        public void onResponse(Call<RelatorioMotorizado> call, Response<RelatorioMotorizado> response) {
            if(response.isSuccessful()){
                Toast.makeText(getActivity(), "User created successfully!", Toast.LENGTH_SHORT).show();
            }
        }

        @Override
        public void onFailure(Call<RelatorioMotorizado> call, Throwable t) {
            Log.e("ERROR: ", t.getMessage());
        }
    });
}

O service que envia para a aplicação remota:

@POST("add/")
Call<RelatorioMotorizado> addUser(@Body RelatorioMotorizado user);

E recebo na aplicação remota dessa forma:

@POST
@Consumes(MediaType.APPLICATION_JSON)
@Path("add")
public String criaRelatorioMotorizado(String relatorioMotorizado) {
	System.out.println("funcJson: "+relatorioMotorizado);
            return gson.toJson(cadastroRelatoriosMotorizado.salvarJson(p));

}

Alguma sugestão?

Ao receber o json fiz assim para os relacionamentos e funcionou:

String stAuxiliar1 = jobj.get("auxiliar1").toString();
JsonObject objAuxiliar1 = new Gson().fromJson("{id:"+stAuxiliar1+"}", JsonObject.class);
jobj.add("auxiliar1", new Gson().toJsonTree(objAuxiliar1));

É uma boa prática ou tem outra forma de fazer?

Eu nao sei como funciona a forma que voce fez. mas usando spring eu so adiciono um converte dessa forma:

package br.com.tmautomacao.aratu.controller.converter;

import org.springframework.core.convert.converter.Converter;
import org.springframework.stereotype.Component;
import org.springframework.util.StringUtils;

import br.com.tmautomacao.aratu.model.Empresa;

@Component
public class EmpresaConverter implements Converter<String, Empresa> {

	@Override
	public Empresa convert(String id) {
		if (!StringUtils.isEmpty(id)) {
			Empresa empresa = new Empresa();
			empresa.setId(Long.valueOf(id));
			return empresa;
		}
		return null;
	}

}

que o proprio spring resolve o resto