[英]Dropwizard/Jersey is giving “Unable to process JSON” message on GET request
[英]Access JSON data in PUT request - Jersey Dropwizard
我正在使用球衣dropwizard并尝试按以下方式更新记录:
@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`
...
}
我的要求数据:
{ "description": "dummy description" }
我的问题是我无法访问PUT请求中的数据。 它始终显示为null
。 我已经用@FormParam
尝试过了,没有运气。
编辑:
在Sam做出回应后,我提出了建议性更改并得到以下例外:
@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());
...
}
返回错误:
{
"code": 400
"message": "Unable to process JSON"
}
数据不是@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映射。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.