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

前端之家收集整理的这篇文章主要介绍了在JAX-RS中将JSON解组为Java POJO前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我希望得到每个Json格式调用的键和值,并将它们用作 java对象,如String或Integer,在我将输入的休息客户端
{
名称”: “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 []或File或InputStream的阅读器.所以以下内容可以解决问题
@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模块,这是

<dependency>
  <groupId>com.fasterxml.jackson.jaxrs</groupId>
  <artifactId>jackson-jaxrs-json-provider</artifactId>
  <version>2.2.3</version>
</dependency>

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

你可以找到所有这些here.只需单独搜索它们.

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

一旦你注册了它,你就需要了解Jackson如何处理序列化的基础知识.在最基本的层面上,杰克逊寻找JavaBean properties(基本的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 Entity Provider了解有关读者和作家的更多信息

原文链接:https://www.f2er.com/js/155931.html

猜你在找的JavaScript相关文章