首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >JsonObjectRequest发送空参数

JsonObjectRequest发送空参数
EN

Stack Overflow用户
提问于 2022-04-28 09:34:43
回答 2查看 117关注 0票数 0

我试图向我的节点后端发送带有json参数的请求。这是Android中的功能:

代码语言:javascript
复制
public boolean checkUser(String user, String passw) {

        final String url = "http://10.0.2.2:3000/";
        final String get = "auth";

        JSONObject paramJson = new JSONObject();

        try {
            paramJson.put("user", "value1");
            paramJson.put("pass", "value2");

        } catch (JSONException e) {
            e.printStackTrace();
        }

        Log.d("JSON", paramJson.toString());

        JsonObjectRequest jsonObjectRequest = new JsonObjectRequest(Request.Method.GET,url + get, paramJson,
                response -> {
                    Toast.makeText(getApplicationContext(),
                            response.toString(),
                            Toast.LENGTH_LONG);
                },
                error -> {
                    Toast.makeText(getApplicationContext(),
                            error.toString(),
                            Toast.LENGTH_LONG);
                });
        queue.add(jsonObjectRequest);
        return false;
    }

但是,当我试图获取后端的json值时,我得到了一个空体。

代码语言:javascript
复制
app.get("/auth", async (req, res) => {
    let user = req.body.user;
    let pass = req.body.pass;
    console.log(req.body);
    if (!user || !pass) {
        res.status(500).send("Missing user or pass");
        return;
    }
    ...
}

因此,基本上我不知道如何访问数据,我尝试记录整个请求,但找不到json字段或值。这里有什么帮助吗?

编辑:

我已经尝试了以下几种方法:

CustomRequest.java

代码语言:javascript
复制
package com.example.apptonia;

import java.io.UnsupportedEncodingException;
import java.util.Map;
import org.json.JSONException;
import org.json.JSONObject;
import com.android.volley.NetworkResponse;
import com.android.volley.ParseError;
import com.android.volley.Request;
import com.android.volley.Response;
import com.android.volley.Response.ErrorListener;
import com.android.volley.Response.Listener;
import com.android.volley.toolbox.HttpHeaderParser;

public class CustomRequest extends Request<JSONObject> {

    private Listener<JSONObject> listener;
    private Map<String, String> params;

    public CustomRequest(String url, Map<String, String> params,
                         Listener<JSONObject> reponseListener, ErrorListener errorListener) {
        super(Method.GET, url, errorListener);
        this.listener = reponseListener;
        this.params = params;
    }

    public CustomRequest(int method, String url, Map<String, String> params,
                         Listener<JSONObject> reponseListener, ErrorListener errorListener) {
        super(method, url, errorListener);
        this.listener = reponseListener;
        this.params = params;
    }

    protected Map<String, String> getParams()
            throws com.android.volley.AuthFailureError {
        return params;
    };

    @Override
    protected Response<JSONObject> parseNetworkResponse(NetworkResponse response) {
        try {
            String jsonString = new String(response.data,
                    HttpHeaderParser.parseCharset(response.headers));
            return Response.success(new JSONObject(jsonString),
                    HttpHeaderParser.parseCacheHeaders(response));
        } catch (UnsupportedEncodingException e) {
            return Response.error(new ParseError(e));
        } catch (JSONException je) {
            return Response.error(new ParseError(je));
        }
    }

    @Override
    protected void deliverResponse(JSONObject response) {
        // TODO Auto-generated method stub
        listener.onResponse(response);
    }
}

MainActivity.java

公共布尔checkUser(字符串用户,字符串密码){

代码语言:javascript
复制
final String url = "http://10.0.2.2:3000/";
final String get = "auth";

JSONObject paramJson = new JSONObject();

try {
    paramJson.put("user", "value1");
    paramJson.put("pass", "value2");

} catch (JSONException e) {
    e.printStackTrace();
}

Log.d("JSON", paramJson.toString());

Map<String, String> paramMap = new HashMap<String, String>();
paramMap.put("user", "value1");
paramMap.put("pass", "value2");

CustomRequest jsObjRequest =
        new CustomRequest(Request.Method.GET, url + get, paramMap,
        response -> {
            Toast.makeText(getApplicationContext(),
                    response.toString(),
                    Toast.LENGTH_LONG);
        },
                error -> {
        Toast.makeText(getApplicationContext(),
                    error.toString(),
                    Toast.LENGTH_LONG);
                });

queue.add(jsObjRequest);
return false;

}

上下文:我正在开发一个带有API的演示项目,该API可以对用户进行身份验证,因此我将发送一个带有参数user/password的get请求。如果有更充分的要求,请告诉我。这对我来说是第一次。

EN

回答 2

Stack Overflow用户

发布于 2022-05-10 04:37:17

尝试发送邮递员的post请求,如果您正在从postman获得enpty body,我认为您需要在节点js入口文件中的节点js应用程序中添加body解析器(比如Server.js/app.js)。

代码语言:javascript
复制
    var bodyParser = require('body-parser');
    var httpApp = express();
    
    httpApp.use(bodyParser.json({
        limit: '50mb'
    }));
    httpApp.use(bodyParser.urlencoded({
        extended: true,
        limit: '50mb'
    }));
    var httpServer = httpApp.listen(httpPort, function () {
    try {
        Logs.WriteLog("Server started on " + httpPort,
            null, "ServerLogs");
      } catch (e) {}
    });

在此之后,您将能够在下面的代码中获得主体。

代码语言:javascript
复制
app.get("/auth", async (req, res) => {
    let user = req.body.user;
    let pass = req.body.pass;
    console.log(req.body);
    if (!user || !pass) {
        res.status(500).send("Missing user or pass");
        return;
    }
    ...
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/72041350

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档