可以传递请求的json对象得到我正在尝试的内容,但我错过了以下错误

时间:2019-05-14 21:04:15

标签: java json rest post get

可以为请求传递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 个答案:

答案 0 :(得分: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, Appendix 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进行百分比编码的查询,而不是LEFT CURLY BRACKET和RIGHT CURLY BRACKET。您的URI好像有人决定使用自己的URI编码器,并且未正确处理所有“特殊字符”。

一种验证您的Java脚本方面(而不是服务器上运行的Java)有问题的方法是查看正在生成的HTTP请求,并验证将其用作目标uri的值请求:如果查询中的拼写无效,则服务器当然与问题无关(除了报告问题)。