Я использую модификацию, чтобы отправить вызов API, чтобы опубликовать проблему в трекере ошибок через мое приложение для Android.API нужно отформатировать определенным образом, поэтому я создал собственный объект для передачи в качестве параметра.К сожалению, когда я отправляю запрос в API, он неправильно форматирует его.Он размещает в алфавитном порядке параметры, заключает в кавычки и ключи, и значения, а также добавляет знак @ к началу моих данных, что приводит к тому, что API не сможет понять, что я пытаюсь опубликовать.Формат, который я ищу для отправки:
{ fb_user_id: dummyUID,
email: dummy@email.com,
first_name: John,
last_name: Smith,
project: android,
type: bug,
subject: title,
description: description }
Вместо этого мой API получает данные как
@"description":"description",
"email":"dummy@email.com",
"fb_user_id":"dummyUID",
"first_name":"John",
"last_name":"Smith",
"project":"android",
"subject":"title",
"type":"bug"
Я использую модификацию, чтобы сделать это, смой интерфейс выглядит как
public interface MyAPI {
@POST("/op_create_ticket")
Observable<JsonElement> createTicket(@Body Ticket ticket);
}
И моя деятельность, называющая это, выглядит следующим образом:
public class HelpActivity extends BaseActivity {
@BindView(R.id.textView)
TextView textView;
@BindView(R.id.spinner)
Spinner spinner;
@BindView(R.id.email)
EditText email;
@BindView(R.id.firstName)
EditText firstName;
@BindView(R.id.lastName)
EditText lastName;
@BindView(R.id.subject)
EditText title;
@BindView(R.id.description)
EditText description;
@BindView(R.id.button3)
Button button3;
FirebaseAuth fbauth = FirebaseAuth.getInstance();
FirebaseUser user = fbauth.getCurrentUser();
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_help);
ButterKnife.bind(this);
}
@OnClick(R.id.button3)
public void onViewClicked() {
final GsonBuilder gsonBuilder = new GsonBuilder();
final Gson gson = gsonBuilder.create();
Retrofit.Builder builder = new Retrofit.Builder();
builder.baseUrl("https://my.url");
builder.addCallAdapterFactory(RxJava2CallAdapterFactory.create());
builder.addConverterFactory(GsonConverterFactory.create());
Retrofit retrofit = builder.build();
MyAPI api = retrofit.create(TriggerWatchAPI.class);
Ticket ticket = new Ticket();
ticket.setFb_user_id(user.getUid());
ticket.setEmail(email.getText().toString());
ticket.setFirst_name(firstName.getText().toString());
ticket.setLast_name(lastName.getText().toString());
ticket.setProject("android");
ticket.setType("design");
ticket.setSubject(title.getText().toString());
ticket.setDescription(description.getText().toString());
api.createTicket(ticket).subscribeOn(Schedulers.io()).observeOn(AndroidSchedulers.mainThread())
.subscribe(new Observer<JsonElement>() {
@Override
public void onSubscribe(Disposable d) {
}
@Override
public void onNext(JsonElement jsonElement) {
Log.d(getTag(), "zzzOnNext");
}
@Override
public void onError(Throwable e) {
Log.e(getTag(), "err", e);
}
@Override
public void onComplete() {
}
});
}
}
Мне интересно, есть ли какой-либо конвертер или что-то, что может преобразовать мой объект в видданных, которые ищет API.
изменить: забыл добавить свой пользовательский pojo
package watch.trigger.Model;
public class Ticket {
private String project;
private String first_name;
private String email;
private String description;
private String subject;
private String last_name;
private String fb_user_id;
private String type;
public String getProject ()
{
return project;
}
public void setProject (String project)
{
this.project = project;
}
public String getFirst_name ()
{
return first_name;
}
public void setFirst_name (String first_name)
{
this.first_name = first_name;
}
public String getEmail ()
{
return email;
}
public void setEmail (String email)
{
this.email = email;
}
public String getDescription ()
{
return description;
}
public void setDescription (String description)
{
this.description = description;
}
public String getSubject ()
{
return subject;
}
public void setSubject (String subject)
{
this.subject = subject;
}
public String getLast_name ()
{
return last_name;
}
public void setLast_name (String last_name)
{
this.last_name = last_name;
}
public String getFb_user_id ()
{
return fb_user_id;
}
public void setFb_user_id (String fb_user_id)
{
this.fb_user_id = fb_user_id;
}
public String getType ()
{
return type;
}
public void setType (String type)
{
this.type = type;
}
@Override
public String toString()
{
return "ClassPojo [project = "+project+", first_name = "+first_name+", email = "+email+", description = "+description+", subject = "+subject+", last_name = "+last_name+", fb_user_id = "+fb_user_id+", type = "+type+"]";
}
}