访问PUT请求中的JSON数据 - Jersey Dropwizard

时间:2016-05-27 18:52:44

标签: java rest jersey put dropwizard

我正在使用jersey dropwizard并尝试更新记录,如下所示:

img = Image.fromarray(current.transpose(1,0,2))

我的请求数据:

    @PUT
    @Path("api/v1/tasks/{taskId}")
    @Consumes(MediaType.APPLICATION_FORM_URLENCODED)
    @Produces(MediaType.APPLICATION_JSON)
    @UnitOfWork
    public Task updateMyTask(@PathParam("taskId") long taskId, @QueryParam("description") String description) {
        ...

        System.out.println(description); // Always `null`

        ...
    }

我的问题是我无法访问PUT请求中的数据。它始终显示为{ "description": "dummy description" } 。我已经用null尝试了这个,没有运气。

修改

Sam's回复后,我提出了建议的更改并获得以下例外情况:

@FormParam

返回错误:

@PUT
@Path("api/v1/tasks/{taskId}")
@Consumes(MediaType.APPLICATION_JSON)
@UnitOfWork
public Task updateTask(Task task, @PathParam("taskId") long taskId) {
    ...

    System.out.println(task.getDescription());

    ...
}

1 个答案:

答案 0 :(得分:0)

数据不是@FormParam@QueryParam,它只是请求的正文,因此不需要任何注释。

它需要的是一个POJO,它描述了您提供的JSON数据的格式。对于一个简单的String值,可能如下所示:

class Task {
    String description;
    ... // other fields
}

您的@Consumes注释也很混乱。您已将方法注释为@Consumes(MediaType.APPLICATION_FORM_URLENCODED),但您尝试将其发送给JSON数据。将您的方法声明为:

@Consumes(MediaType.APPLICATION_JSON)
...
public Task updateMyTask(Task task, @PathParam("taskId") long taskId) {
    System.out.println(task.description); // not null any more
}

您需要确保在Jersey中启用了JSON映射。