我正在使用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());
...
}
答案 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映射。