当前位置: 首页 > 知识库问答 >
问题:

Java泽西得到POST数组

澹台新知
2023-03-14

我试图通过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

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

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,但仍然不起作用

共有1个答案

蔚丰
2023-03-14

您正在消费:

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

然而,您正在使用PathParam检索参数。对于内容类型application/x-www-form-urlencoded,可以使用注释读取参数。

哦,您的HTTP多值表单参数的格式必须为:

buckets=6&buckets=6

无需在标志前面设置[]。

我希望这能有所帮助。

 类似资料:
  • 下面的代码有效 下面的代码是抛出错误 低于异常 [[FATAL]找不到public javax类型参数的注入源。ws。rs.core。回复com。特里姆布尔。帕斯。大声点。metricscollector。资源MetricsResource。索引1处的PostMetricData(java.lang.String,java.lang.String)。;source='ResourceMethod{

  • 问题内容: 我正在使用Jersey创建REST API。我有一个POST方法,作为该方法的响应,应该将用户重定向到自定义URL ,因为它不必与API相关。 我在这里查看有关此主题的其他类似问题,但没有找到任何我可以使用的东西。 问题答案: 我建议更改JAX- RS注释方法的签名以返回对象。根据您打算重定向是永久重定向还是临时重定向(即客户端是否应更新其内部引用以反映新地址),该方法应构建并返回对应

  • 问题内容: 我在应用程序中使用Jersey 1.8。我正在尝试在服务器上使用数据。数据是类型的。 有没有一种方法可以将所有数据(可能是)收集到一个对象中。 我碰到泽西岛的。但是使用此功能需要我使用,如果参数数量巨大,这可能很乏味。也许这是一种方法: 上面的代码使用并呈现对象中的表单数据。 处理此错误可能会很容易出错,因为任何放错位置和split()都将返回损坏的数据。 我在大多数工作中都使用Uri

  • 我目前使用的是球衣 我现在要做的是设置泽西,这样当查询参数进来时(比如缩进),我可以告诉Jackson以“更漂亮的格式,也就是缩进”序列化JSON。您可以通过使用SerializationConfig.Feature.INDENT_OUTPUT配置JSON映射器来轻松地告诉Jackson这样做。 问题是,我如何在每个请求的基础上获取一个queryparam并使用它来修改Jackson的输出?

  • 我想创建一个类的单例实例,这个类不是作为资源或服务在Jersey中涉及的,但希望它的依赖项从Jersey ServiceLocator中注入。 我可以在ResourceConfig构造函数中手动注册该类,然后将ResourceConfig传入Grizzly工厂方法,如下所示:

  • 我对web服务非常陌生,所以我从基本示例开始。这与文件上传有关。我正在为非maven开发人员使用最新(2.17)版本的Jersey捆绑包。它指出: 捆绑包包含JAX-RS 2.0 API jar、所有核心泽西模块jar以及所有必需的第3方依赖项 .问题是我不能编译这部分: Jersey 2.17捆绑包中似乎不存在FormDataParam,尽管docs表示存在。2.17捆绑包是否不完整?如何解决此