JSON解组到Java POJO的JAX-RSJSON解组到Java POJO的JAX-RS(Unm

2019-05-12 03:14发布

我希望得到键和值到每个JSON格式的呼叫,并把它们作为Java对象,如字符串或整数,在其余客户会输入{“名称”:“HelloWorld”的}

我会回来的HelloWorld的映射,其重点到目前为止香港专业教育学院看到的例子,但只是很难找到什么每个标签不和如何解析身体,得到上述结果IM

@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;

    } 

Answer 1:

你需要了解的第一件事是请求主体的解析是怎么做的。 在JAX-RS解析(或数据编/反序列化/无论)与做MessageBodyReader秒。 有迹象表明,可以处理不同的内容类型不同的读者。 例如,如果你有内容类型application/octet-stream ,有一个读者,将散集到byte[]FileInputStream 。 所以下面将工作开箱

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

话虽这么说,JAX-RS的实现都使用了“易于转换”的格式非常基本的读者。 例如,大多数的请求可以被转换为String ,所以你得到的是免费的大部分内容类型,您与您当前的代码。

如果我们想要一些更复杂的数据类型,如您HelloWorld的内容类型application/json ,对于这个没有标准的读卡器。 对于这项工作,我们要么需要创建自己的阅读器,或者使用带有一个读者的图书馆。 幸运的是,在Java中,最流行的JSON框架杰克逊 ,已经实施了具有读取和写入(序列化)一个JAX-RS提供者。

现在,这取决于服务器/ JAX-RS实现您正在使用不同的实现创建围绕核心杰克逊JAX-RS模块,光包装。 如果我知道你正在使用的JAX-RS实现,我会推荐使用的包装,或者你可以忘记的包装和公正的基本杰克逊模块,这是去

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

上面是一个Maven依赖性。 如果你不使用Maven,那么基本上你需要下载所有这些罐子。

你可以找到所有的人都在这里 。 只要搜索他们的个人。

然后,你需要注册的供应商。 同样它取决于你的JAX-RS实现和你如何处理你的资源类的配置。 我需要看到你的应用程序的配置(在web.xml或Java代码),也许你正在使用的服务器来提供帮助的。 对于大部分的JacksonJsonProvider (这是读写器)需要被注册。

一旦你拥有了它,然后注册您需要了解的杰克逊如何处理serializaion的基础知识。 在最基本的层面上,杰克逊查找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格式,您应该指的是杰克逊的文档或在这里问一个问题,关于左右。

至于的登记JacksonJsonProvider ,如果您有问题,请提供我所要求的信息,即应用程序的配置文件(web.xml或Java配置)和正在使用的服务器。

也可以看看:

  • JAX-RS实体提供更多地了解读者和作家


文章来源: Unmarshal JSON to Java POJO in JAX-RS