возможно передать объект json для запроса получить то, что я пытаюсь, и я пропускаю следующую ошибку

возможно передать объект json для запроса получить то, что я пытаюсь, и я пропускаю следующую ошибку

Caused by: java.net.URISyntaxException: Illegal character in query at index 46: https://localhost/Pro-Ing/rest/pedidos/prueba?{%22codigo%22:%22qwdasdas%22,%22id%22:%221%22}

это метод JavaScript

function hola(){
var id= prompt('hola');
var id2= prompt('hola');
codigo = {};
codigo['codigo'] = id;
codigo['id'] = id2;
    $.ajax({
        url : "rest/pedidos/prueba",
        contentType : "application/json",
        dataType : "json",
        type : "GET",
        data : JSON.stringify(codigo),
        success : function(data) {
            jqmSimpleMessage('Paso');
        }
error : function(error) {
            if (error.status == 401) {
                desAuth();
            } else {
                jqmSimpleMessage("error -" + error.responseText);
            }
        },
        beforeSend : function(xhr, settings) {
            xhr.setRequestHeader('Authorization', 'Bearer '
                    + getVCookie(getVCookie("userPro")));
        }
    });
}

это метод Java, который получает объект

@GET
@Path("/prueba")
@Consumes(MediaType.APPLICATION_JSON)
@Produces(MediaType.APPLICATION_JSON)
public Response gendup(confirmacion usu,@Context SecurityContext securityContext) {
    registro(securityContext, 0, "");
    confirmacion confirmacion = null;
    Response.ResponseBuilder builder = null;
    return builder.build();
}

Всего 1 ответ


Illegal character in query at index 46: https://localhost/Pro-Ing/rest/pedidos/prueba?{%22codigo%22:%22qwdasdas%22,%22id%22:%221%22}

Массивы в Java основаны на нуле, поэтому

01234567890123456789012345678901234567890123456
https://localhost/Pro-Ing/rest/pedidos/prueba?{%22codigo%22:%22qwdasdas%22,%22id%22:%221%22
                                              ^

RFC 3986, Приложение A описывает, какие символы разрешены в запросе.

query         = *( pchar / "/" / "?" )

pchar         = unreserved / pct-encoded / sub-delims / ":" / "@"

unreserved    = ALPHA / DIGIT / "-" / "." / "_" / "~"
pct-encoded   = "%" HEXDIG HEXDIG
sub-delims    = "!" / "$" / "&" / "'" / "(" / ")"
              / "*" / "+" / "," / ";" / "="

Таким образом, проблема, с которой вы здесь столкнулись, заключается в том, что ваш java-анализатор строго определяет, какие символы разрешены в URI, и ни левая фигурная скобка { ни правая фигурная скобка } не действительны - их также необходимо кодировать в процентах.

https://localhost/Pro-Ing/rest/pedidos/prueba?%7B%22codigo%22:%22qwdasdas%22,%22id%22:%221%22%7D

Этот URI с процентами скобок, закодированными в соответствии с требованиями спецификации, должен удовлетворять Java-коду.

Я предполагаю, что JSON.stringify делает то, что мы ожидали:

> JSON.stringify({"codingo":"qwdasdas","id":"1"})
'{"codingo":"qwdasdas","id":"1"}'

На основании предоставленной вами информации для меня не имеет смысла, почему вы получаете запрос, в котором QUOTATION MARK кодируется в процентах, а не влево, вправо и вправо. Ваш URI выглядит так, как будто кто-то решил свернуть свой собственный URI-кодировщик и неправильно обработал все «специальные символы».

Чтобы убедиться, что это проблема на стороне вашего java-скрипта, а не на java-сервере, работающем на сервере, можно посмотреть на генерируемый HTTP-запрос и проверить значение, используемое в качестве target-uri для запроса: если в запросе указано неверное правописание, то сервер, безусловно, не имеет отношения к проблеме (кроме сообщения о ней).


Есть идеи?

10000