Как использовать httpclient или HttpURLConnection для вызова службы отдыха трикотажа с помощью List @FormParam

я пытаюсь вызвать службу трикотажа с Android

@POST
@Path("/share")
@Produces(MediaType.APPLICATION_JSON)
@Consumes(MediaType.APPLICATION_FORM_URLENCODED)
public Response shareProgramVideo(@FormParam("from")Integer from, @FormParam("to")List<Integer> to,@FormParam("programIds")List<Integer> programIds) 

сервис отлично работает с html формой

<html>
    <head>
        <title>REST with Forms</title>
        <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
    </head>
    <body>
        <br />
        <form method="post" action="../dataService/rest/secure/program/share">

             from: <input type="text" name="from" id="from" /><br />

             to 1: <input type="text" name="to" id="to" /><br />
             to 2: <input type="text" name="to" id="to" /><br />

             programIds 1: <input type="text" name="programIds" id="programIds" /><br />
             programIds 2: <input type="text" name="programIds" id="programIds" /><br />
            <input type="submit" value="Submit" />
        </form>
    </body>
</html>

я использую библиотеку Android и HttpRequest (https://github.com/kevinsawicki/http-request ), но это дает мне 400 ошибок неверного запроса

     List<Integer> programs = new ArrayList<Integer>();
programs.add(1);
programs.add(2);

List<Integer> to = new ArrayList<Integer>();
to.add(1);
to.add(2);

Map<String, Object> data = new HashMap<String, Object>();
data.put("from", 1);
data.put("to", to);
data.put("programIds", programs);

HttpRequest request = HttpRequest.post(url)
        .basic(WebServiceConfig.ADMIN, WebServiceConfig.ADMIN_PSW).contentType("application/x-www-form-urlencoded")
        .acceptJson().form(data);

if (request.created() || request.ok()) {

    return true;

} else {

    Log.e("CreateUserProgramTask",
            "request.code()=" + request.code() + "request.body()="
                    + request.body());

    return false;

}

person yassinedz    schedule 26.05.2013    source источник


Ответы (1)


Я не знаю, какую библиотеку вы используете, но я думаю, что проблема может заключаться в том, как вы создаете параметры «программы» и «для»:

List<Integer> programs = new ArrayList<Integer>();
programs.add(1);
programs.add(2);

List<Integer> to = new ArrayList<Integer>();
to.add(1);
to.add(2);

Map<String, Object> data = new HashMap<String, Object>();
data.put("from", 1);
data.put("to", to);
data.put("programIds", programs); 

Кажется, что библиотека просто выполняет вызов toString() в списках, но я думаю, что вы должны сериализовать как:

programs = "program1,program2"
to = "to1,to2"

Я думаю, что это не то, что написано в карте данных.

person futuretelematics    schedule 27.05.2013