在JAX-RS中将JSON解组为Java POJO

我希望得到每个Json格式化调用的键和值,并将它们用作java对象,如String或Integer,在其他客户端我将输入{“Name”:“HelloWorld”}

我会回到HelloWorld映射到它的Key到目前为止我见过的例子,但我只是很难找出每个标签做什么以及如何解析身体给出上述结果

@POST @Path("/SetFeeds") @Consumes(MediaType.APPLICATION_JSON) @Produces(MediaType.APPLICATION_JSON) @JsonCreator public String setFeed(String jsonBody,@Context UriInfo uriInfo){ ...Code to manipulate the body of the request return response; } 

您需要了解的第一件事是如何完成请求正文解析。 在JAX-RS中,使用MessageBodyReader进行解析(或解组/反序列化/其他)。 有不同的读者可以处理不同的Content-Type。 例如,如果您有Content-Type application/octet-stream ,则有一个将解组为byte[]FileInputStream的阅读器。 所以以下内容可以解决问题

 @Consumes("application/octet-stream") public Response post(File file) {} // or `byte[]` or `InputStream` 

话虽这么说,JAX-RS实现带有非常基本的“易于转换”格式的阅读器。 例如,大多数请求都可以转换为String ,因此大多数内容类型都可以免费获得,就像使用当前代码一样。

如果我们想要一些更复杂的数据类型,比如HelloWorld for Content-Type application/json ,那么就没有标准的阅读器。 为此,我们要么需要创建自己的阅读器,要么使用阅读器附带的库。 幸运的是,Java中最受欢迎的JSON框架Jackson已经实现了一个JAX-RS提供程序,它具有读取器和编写器(用于序列化)。

现在,根据您正在使用的服务器/ JAX-RS实现,不同的实现在核心Jackson JAX-RS模块周围创建了光包装器。 如果我知道您正在使用的JAX-RS实现,我可以推荐使用哪个包装器,或者您可以忘记包装器并使用基本的Jackson模块,这是

  com.fasterxml.jackson.jaxrs jackson-jaxrs-json-provider 2.2.3  

以上是Maven的依赖。 如果您不使用Maven,那么基本上您需要下载所有这些jar子。

杰克逊德普斯

你可以在这里找到所有这些。 只需单独搜索它们。

然后,您需要注册提供商。 同样,它取决于您的JAX-RS实现以及如何处理资源类的配置。 我需要查看您的应用程序配置(web.xml或Java代码)以及您正在使用的服务器来帮助解决这个问题。 在大多数情况下,需要注册JacksonJsonProvider (读者和作者)。

一旦你注册了它,你就需要了解jackson如何处理序列化的基础知识。 在最基本的层面上,Jackson查找JavaBean属性 (基本的getter / setter)以匹配JSON属性。 例如,如果你有这个bean属性

 public class HelloWorld { private String name; public String getName() { return name; } public void setName(String name) { this.name = name; } } 

JSON应该看起来像{"name": "whatever"}"name"键与bean属性相同。 在Bean属性术语中,属性的名称是get/set之后的所有字母,第一个字母是小写的。

这就是它的全部内容。 现在你可以做到

 @Consumes("application/json") public Response post(HelloWorld helloWorld) { String name = helloWorld.getName(); // should == "whatever" return Response.ok(helloWorld).build(); // we can also return objects } 

对于更复杂的JSON格式,您应该参考Jackson文档或在SO上提出问题。

就注册JacksonJsonProvider ,如果遇到问题,请提供我要求的信息,即应用程序配置(web.xml或Java配置)和您正在使用的服务器。

也可以看看:

  • JAX-RS实体提供程序,以了解有关读者和作者的更多信息