为什么我通过改造在我的请求中收到 "bad request"

why I receive "bad request" in my request by retrofit

我正在尝试使用改造来注册用户。我的错误在哪里?

这是我的界面:

public interface ChatRoomAPI {
String BASE_URL="https://karyab-api.herokuapp.com/";
Retrofit retrofit = new Retrofit.Builder()
.baseUrl(BASE_URL)
.addConverterFactory(GsonConverterFactory.create())
.addConverterFactory(ScalarsConverterFactory.create())
.build();
 @POST("register")
 Call<RegisterResponse> registerUser(@Body RegisterData registerData);

这是寄存器的主体 pojo class:

public class RegisterData {
@SerializedName("email")
@Expose
private String email;
@SerializedName("password")
@Expose
private String password;
public String getEmail() {return email;}
public void setEmail(String email) {this.email = email;}
public String getPassword() {return password;}
public void setPassword(String password) {this.password = password;}

这是回复 pojo class:

public class RegisterResponse {
@SerializedName("user")
@Expose
private User user;
@SerializedName("token")
@Expose
private String token;
public User getUser() {return user;}
public void setUser(User user) {this.user = user;}
public String getToken() {return token;}
public void setToken(String token) { this.token = token;}

我的代码 activity:

private void registerUser(RegisterData registerData) {
ChatRoomAPI webService =
ChatRoomAPI.retrofit.create(ChatRoomAPI.class);
Call<RegisterResponse> call = webService.registerUser(registerData);
call.enqueue(new Callback<RegisterResponse>() {
@Override
public void onResponse(@NonNull Call<RegisterResponse> call, 
@NonNull Response<RegisterResponse> response) {
if (response.isSuccessful()) {
RegisterResponse body = response.body();
Toast.makeText(LoginActivity.this,
body.getToken(),
Toast.LENGTH_SHORT).show();
}else{
   try {
String errorBodyJson=response.errorBody().string();
Gson gson=new Gson();
ErrorResponce 
errorResponce=gson.fromJson(errorBodyJson, 
ErrorResponce.class);
Toast.makeText(LoginActivity.this,
response.message(),
Toast.LENGTH_SHORT).show();
} catch (IOException e) {
e.printStackTrace();
}
}
}
@Override
public void onFailure(Call<RegisterResponse> call, Throwable t) {
Toast.makeText(LoginActivity.this,
"Received " + t.getCause() + " items from service",
Toast.LENGTH_SHORT).show();
}
});

我不知道我的错误在哪里。在邮递员中我得到 200 OK 但在这里我收到错误的请求。

这并不复杂,但我很累解决它请帮助我并节省我的时间。

这是邮递员的结果:

{
"user": {
"id": 26,
"updatedAt": "2019-08-16T16:35:04.347Z",
"createdAt": "2019-08-16T16:35:04.347Z",
"email": null,
"password": null
},
"token": "eyJhbGciOiJIUzI...
 }

这里是postman中的输入。

{
"email":"aaaaa",
"password":"11111"
}

您应该使用@FormUrlEncoded

试试这个

创建 class RegResponse

public class RegResponse{

@SerializedName("user")
private User user;

@SerializedName("token")
private String token;

public void setUser(User user){
    this.user = user;
}

public User getUser(){
    return user;
}

public void setToken(String token){
    this.token = token;
}

public String getToken(){
    return token;
}

@Override
public String toString(){
    return 
        "RegResponse{" + 
        "user = '" + user + '\'' + 
        ",token = '" + token + '\'' + 
        "}";
    }
}

创建Class用户

public class User{

@SerializedName("createdAt")
private String createdAt;

@SerializedName("password")
private Object password;

@SerializedName("id")
private int id;

@SerializedName("email")
private Object email;

@SerializedName("updatedAt")
private String updatedAt;

public void setCreatedAt(String createdAt){
    this.createdAt = createdAt;
}

public String getCreatedAt(){
    return createdAt;
}

public void setPassword(Object password){
    this.password = password;
}

public Object getPassword(){
    return password;
}

public void setId(int id){
    this.id = id;
}

public int getId(){
    return id;
}

public void setEmail(Object email){
    this.email = email;
}

public Object getEmail(){
    return email;
}

public void setUpdatedAt(String updatedAt){
    this.updatedAt = updatedAt;
}

public String getUpdatedAt(){
    return updatedAt;
}

@Override
public String toString(){
    return 
        "User{" + 
        "createdAt = '" + createdAt + '\'' + 
        ",password = '" + password + '\'' + 
        ",id = '" + id + '\'' + 
        ",email = '" + email + '\'' + 
        ",updatedAt = '" + updatedAt + '\'' + 
        "}";
    }
}

创建界面

public interface ApiInterface {

@FormUrlEncoded
@POST
Call<RegResponse> register(@Url String url, @Field("email") String user, 
 @Field("password") String password);
}

现在在您的 MainActivity 中

 submit.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {
            reg();
        }
    });


private void reg() {

    try {
        ApiInterface apiService = ApiClient.getClient().create(ApiInterface.class);
        retrofit2.Call<RegResponse> responseBodyCall = 
apiService.register("https://karyab-api.herokuapp.com/register", 
edtUser.getText().toString(), edtPass.getText().toString());
        responseBodyCall.enqueue(new Callback<RegResponse>() {
            @Override
            public void onResponse(retrofit2.Call<RegResponse> call, 
retrofit2.Response<RegResponse> response) {

                if (response.isSuccessful()) {
                    Toast.makeText(LoginAcitivity.this, "Register Succesfully..", 
Toast.LENGTH_SHORT).show();
                } else {
                    Toast.makeText(LoginAcitivity.this, "fail", 
Toast.LENGTH_SHORT).show();
                }
            }

            @Override
            public void onFailure(retrofit2.Call<RegResponse> call, Throwable t) {
                Log.e(" fail ", " is calling");
            }
        });
    } catch (Exception e) {
        e.printStackTrace();
        Log.e("exception", ":" + e);
    }
}