当前位置:  开发笔记 > 编程语言 > 正文

如何使用Dropwizard读取JSON请求体

如何解决《如何使用Dropwizard读取JSON请求体》经验,为你挑选了1个好方法。

我一直在编写简单的dropwizard应用程序,一切正常,直到我不得不更改请求类型.因为我之前从Header得到了我的参数,现在我必须从JSON请求的主体中获取它们.最可悲的是 - 没有关于dropwizard或任何文章的完整文档,这对我有帮助.这是我的代码:

@Path("/actors")
@Produces("application/json")
public class ActorResource {
    private final ActorDAO dao;

    public ActorResource(ActorDAO dao) {
        this.dao = dao;
    }

    @POST
    @UnitOfWork
    public Saying postActor(@HeaderParam("actorName") String name,@HeaderParam("actorBirthDate") String birthDate) {
        Actor actor = dao.create(new Actor(name,birthDate));
        return new Saying("Added : " + actor.toString());
    }

有没有人有办法解决吗?



1> pandaadb..:

根据要求,这是一个片段,展示你想要做什么:

@Path("/testPost")
@Produces(MediaType.APPLICATION_JSON)
public class TestResource {

    @POST
    public Response logEvent(TestClass c) {
        System.out.println(c.p1);

        return Response.noContent().build();
    }

    public static class TestClass {

        @JsonProperty("p1")
        public String p1;

    }
}

TestClass是我的身体.泽西知道,它需要将身体解析为该物体.

然后,我可以卷起我的API:

curl -v  -XPOST "localhost:8085/api/testPost" -H "Content-Type: application/json" -d '{"p1":"world"}'

Jersey知道通过方法参数做什么,并通过Jackson Annotation如何对待JSON.

希望有所帮助,

阿图尔

编辑:对于更手动的方法,您可以:

在你的post方法中,注入

@Context HttpServletRequest request

从注入的请求中,将主体写入String以进行处理:

StringWriter writer = new StringWriter();
        try {
            IOUtils.copy(request.getInputStream(), writer);
        } catch (IOException e) {
            throw new IllegalStateException("Failed to read input stream");
        }

现在使用任何库将该字符串映射到您想要的任何对象.

推荐阅读
Chloemw
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有