gpt4 book ai didi

java - 如何使用 Dropwizard 读取 JSON 请求正文

转载 作者:行者123 更新时间:2023-12-01 23:27:18 26 4
gpt4 key购买 nike

我一直在编写简单的 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());
}

有人有解决办法吗?

最佳答案

根据要求,这里有一个片段演示您想要执行的操作:

@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 是我的 body 。 Jersey 立即知道它需要将主体解析为该对象。

然后我可以执行以下操作来执行我的 API:

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

Jersey 通过方法参数知道要做什么,并通过 Jackson Annotation 知道如何处理 JSON。

希望有帮助,

阿图尔

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

在您的 post 方法中,注入(inject)

@Context HttpServletRequest request

并从注入(inject)的请求中,将正文写入字符串中进行处理:

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

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

关于java - 如何使用 Dropwizard 读取 JSON 请求正文,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34289380/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com