【问题标题】:Java Jersey get POST arrayJava Jersey 获取 POST 数组
【发布时间】:2017-04-12 14:15:16
【问题描述】:

我正在尝试通过 POST 检索一个数字数组,发送到服务器的原始数据是:

bucket2=0&buckets%5B%5D=6&buckets%5B%5D=6&buckets%5B%5D=6&buckets%5B%5D=6&buckets%5B%5D=6&buckets%5B%5D=6&buckets%5B%5D=6&buckets%5B%5D=6&buckets%5B%5D=6&buckets%5B%5D=6&buckets%5B%5D=6&buckets%5B%5D=6&bucket1=0&currPlayer=0&bucketID=0

这包含一个数组 buckets = [6, 6, 6, ...],来自 javascript 控制台:

Object { bucket2: 0, buckets: Array[12], bucket1: 0, currPlayer: 0 }

发布我使用以下代码:

$.ajax({
    type: "POST",
    url: baseUrl + "move",
    data: game,
    success: function(data) {
        // console.log(data);
        update(data); 
    }, error: function(jqXHR, textStatus, errorThrown) {
        console.log(errorThrown); 
    }
});

我的服务器代码是:

@POST
@Consumes(MediaType.APPLICATION_FORM_URLENCODED)
@Produces(MediaType.APPLICATION_JSON)
@Path("/move")
public String move(@PathParam("currPlayer") int currPlayer,
                        @PathParam("bucket1") int bucket1,
                        @PathParam("bucket2") int bucket2,
                        @PathParam("buckets") List<Integer> buckets,
                        @PathParam("bucketID") int bucketID){

    System.out.println("currPlayer: " + currPlayer);
    System.out.println("bucket1: " + bucket1);
    System.out.println("bucket2: " + bucket2);
    System.out.println("buckets: " + buckets);
    System.out.println("bucketID: " + bucketID);
    return "";
}

服务器输出为:

currPlayer: 0
bucket1: 0
bucket2: 0
buckets: []
bucketID: 0

为什么没有得到数组值?

编辑:我在创建此线程之前尝试使用@FormParam,但它仍然不起作用

【问题讨论】:

    标签: arrays post jakarta-ee jersey jax-rs


    【解决方案1】:

    你正在消费:

    @Consumes(MediaType.APPLICATION_FORM_URLENCODED) //Meaning the content-type is `application/x-www-form-urlencoded`.
    

    然而,您正在使用@PathParam 检索参数。对于Content-Type application/x-www-form-urlencoded,可以通过@FormParam注解读取参数。


    哦,你的HTTP多值表单参数必须是这样的:

    buckets=6&buckets=6
    

    %5B%5D 前面不需要= 符号。

    我希望这会有所帮助。

    【讨论】:

    • jQuery 处理转换,所以不知道该怎么做。不过谢谢。
    • 想通了,因为我试图得到@FormParam("buckets"),而它应该是@FormParam("buckets[]")。猜猜这就是%5B%5D 是什么。
    • 酷。很高兴你明白了。
    猜你喜欢
    • 2013-03-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-09-07
    • 1970-01-01
    • 1970-01-01
    • 2017-03-23
    相关资源
    最近更新 更多