【问题标题】:Retrofit POST and NodeJS改造 POST 和 NodeJS
【发布时间】:2017-11-15 23:27:10
【问题描述】:

我无法运行我的应用并获得成功响应。我正在尝试注册。 我在我的活动中收到了 onResponse 的回复:

“响应{protocol=http/1.1, code=400, message=Bad Request, url=http://myip:8122/consumer/signup}”

我不确定,但我认为它没有发送参数。

我已经在 PostMan 上对其进行了测试,并且可以正常工作。我选择了“POST”并写了这个 URL:http://myip:8122/consumer/signup?f=Maria&l=Lucia&e=marlucia@hotmail.com&p=pass123

在 Postman 上运行成功:{"status":"success","message":"created user"}

我的活动:

        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", "jclark@gmail.com", "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());
            }
        });

博纳服务:

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);
}

ResponseInsertUser:

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;
    }

}

我的节点代码:

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
    });
  });
}

【问题讨论】:

    标签: android node.js web-services retrofit retrofit2


    【解决方案1】:

    您需要@Query 参数,而不是@Field 参数,因为它是使用?key=value&amp; 语法添加到URL 的

    应该是快速更改,但您可能还想删除FormUrlEncoded

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2013-11-16
      • 2021-02-03
      • 2015-02-19
      • 1970-01-01
      • 2017-08-07
      • 1970-01-01
      • 2021-03-12
      相关资源
      最近更新 更多