带有标头和JSON的restlet客户端POST请求

带有标头和JSON的restlet客户端POST请求,json,post,header,restlet,Json,Post,Header,Restlet,您能评论一下这个客户端restlet代码的错误吗 有必要: 使用值令牌添加HTTP头X-MF-Auth-Token 将JSON文件放在HTTP请求主体中 向服务器发出POST请求 Post请求生成“400”错误。多谢各位 ClientResource cr = new ClientResource(servername + "/json/place"); cr.getRequest().getAttributes().put("X-MF-Auth-Token",

您能评论一下这个客户端restlet代码的错误吗

有必要:

  • 使用值令牌添加HTTP头
    X-MF-Auth-Token
  • 将JSON文件放在HTTP请求主体中
  • 向服务器发出POST请求
  • Post请求生成“400”错误。多谢各位

            ClientResource cr = new ClientResource(servername + "/json/place");
    
            cr.getRequest().getAttributes().put("X-MF-Auth-Token", token);
    
            Form form = new Form ();
    
            form.add("Category", "");
            form.add("CategoryId", "A1EECAB9-3E66-4F14-92E9-465EDFB22BA7");
            form.add("Latitude", "0");
            form.add("Longitude", "0"); 
            form.add("Name", "Loremipsum");
            form.add("PlaceId", "00000000-0000-0000-0000-000000000099");
    
        cr.post(form, MediaType.APPLICATION_JSON);
    
        if (cr.getStatus().isSuccess()) {
            // Register Successful
            Log.v("Register()", "Successeful");
            return true;
        } else {
            Log.v("Register()", "ERROR");
            return false;
        }
    
        } catch (ResourceException e) {
            // Login Error
        Log.v("AddPlace() error:", e.getStatus().toString());
        return false;
        }
    

    我认为您没有将
    X-MF-Auth-Token
    添加到标题中

    试一试


    您可以使用JSONObject而不是表单:

    JSONObject jo=new JSONObject();
    试一试{
    添加(“类别”、“类别”);
    新增(“类别”、“A1EECAB9-3E66-4F14-92E9-465EDFB22BA7”);
    添加(“纬度”、“0”);
    添加(“经度”、“0”);
    jo.添加(“名称”、“Loremipsum”);
    jo.添加(“PlaceId”,“00000000-0000-0000-0000-0000000000 99”);
    }catch(JSONException ex){
    }
    cr.post(新的JsonRepresentation(jo)、MediaType.APPLICATION_JSON);
    
    谢谢,这很有帮助,但仍然不起作用。有必要将内容类型设置为JSON,但它会发送内容类型:application/x-www-form-urlencoded。有什么想法吗?非常感谢。@mfirry该链接讨论了使用RESTlet服务器端,但没有描述任何关于客户端的内容。OP要求的是客户端。虽然这是很久以前的事了,但是表单默认请求的类型是application/x-www-Form-urlencoded。发送JSON需要不同的数据类型。
    Form headers = (Form) cr.getRequest().getAttributes("org.restlet.http.headers");
    if (headers == null) {
        headers = new Form();
        cr.getRequest().getAttributes.put("org.restlet.http.headers", headers);
    }
    headers.add("X-MF-Auth-Token", token);