2017-06-14 6 views
0

Ich kann meine App nicht mit einer Erfolgsantwort ausführen. Ich versuche mich anzumelden. bekam ich diese Antwort auf onResponse in meiner Tätigkeit:Retrofit POST und NodeJS

"Antwort {protocol = http/1.1, Code = 400, message = Bad Request, url = http://myip:8122/consumer/signup}"

Ich bin nicht sicher, aber ich denke, es sendet nicht die params.

Ich habe es auf PostMan getestet und es funktioniert. Wie wähle ich die "POST" und ich schrieb diese URL: http://myip:8122/consumer/signup?f=Maria&l=Lucia&[email protected]&p=pass123

Auf Postman es funktioniert erfolgreich: { "Status": "Erfolg", "message": "erstellten Benutzer"}

Meine Aktivität:

 Retrofit retrofit = new Retrofit.Builder() 
       .baseUrl(BonaService.BASE_URL_SIGN_UP) 
       .addConverterFactory(GsonConverterFactory.create()) 
       .build(); 

     BonaService service = retrofit.create(BonaService.class); 

     Call<ResponseInsertUser> callRegisterUser = service.registerUser("John", "Clark", "[email protected]", "vtnctrump"); 

     callRegisterUser.enqueue(new Callback<ResponseInsertUser>() { 
      @Override 
      public void onResponse(Call<ResponseInsertUser> call, Response<ResponseInsertUser> response) { 
       if(!response.isSuccessful()){ 
        // HERE!!!! 
        Log.i("TAG", "Error: "+ response.code()); 
       } else { 
        ResponseInsertUser body = response.body(); 
       } 
      } 

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

BonaService:

public interface BonaService { 
    String BASE_URL   = "http://myip:5000/"; 
    String BASE_URL_SIGN_UP = "http://myip:8122/"; 

    @GET("listRandom") 
    Call<BonaCatalog> listCatalog(); 

    @FormUrlEncoded 
    @POST("consumer/signup") 
    Call<ResponseInsertUser> registerUser(@Field("f") String f, 
              @Field("l") String l, 
              @Field("e") String e, 
              @Field("p") String p); 
} 

Resp onseInsertUser:

public class ResponseInsertUser { 

    private String status, message; 

    public String getStatus() { 
     return status; 
    } 

    public void setStatus(String status) { 
     this.status = status; 
    } 

    public String getMessage() { 
     return message; 
    } 

    public void setMessage(String message) { 
     this.message = message; 
    } 

} 

Mein Knoten Code:

function insertUser(req, res, next) { 
var first = req.query.f; 
    db.any('insert into user(id, first_name, last_name, email, password, user_status_id) values((select max(id) from user)+1, $1, $2, $3, $4, 1)', [req.query.f, req.query.l, req.query.e, req.query.p]) 
    .then(function (data) { 
     res.status(201).json({ 
     status: 'success', 
     message: 'created user' 
     }) 
    }) 
    .catch(function (err){ 
    res.status(400).json({ 
     status:'fail', 
     message: 'Error!', 
     test: first 
    }); 
    }); 
} 

Antwort

1

Sie benötigen @Query Parameter, nicht @Field Parameter, da sie auf die URL hinzugefügt wird mit ?key=value& Syntax

Sollte eine schnelle Veränderung, aber Sie möchten vielleicht auch entfernen FormUrlEncoded

+0

Danke! Es klappt! – Victor