繁体   English   中英

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

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM