为什么我通过改造在我的请求中收到 "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);
}
}
我正在尝试使用改造来注册用户。我的错误在哪里?
这是我的界面:
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);
}
}