使用Jersey将JSON绑定到Java对象

时间:2015-10-29 10:26:00

标签: java json web-services rest jersey

我正在使用Jersey开发REST应用程序并在我的服务中创建CRUD操作。

我的问题是如何将JSON绑定为方法中的对象。我无法使用JSON请求执行保存操作。

所以请为我提供开发CRUD应用程序的任何有用示例。

3 个答案:

答案 0 :(得分:7)

Jersey JSON support是一组扩展模块,例如MOXyJackson

MOXy

通过MOXy的JSON绑定支持是自Jersey 2.0以来在Jersey应用程序中支持JSON绑定的默认方式。当JSON MOXy模块位于类路径上时,Jersey将自动发现模块并通过MOXy在您的应用程序中启用JSON绑定支持。

要将MOXy用作JSON提供程序,您需要将jersey-media-moxy模块添加到pom.xml文件中:

<dependency>
    <groupId>org.glassfish.jersey.media</groupId>
    <artifactId>jersey-media-moxy</artifactId>
    <version>2.22.1</version>
</dependency>

如果您不使用Maven,请确保在类路径中包含所有needed dependencies

使用MOXy,您可以使用JAXB annotations来控制JSON的生成方式。

Jackson 2.x

要将Jackson 2.x用作JSON提供程序,您需要将jersey-media-json-jackson模块添加到pom.xml文件中:

<dependency>
    <groupId>org.glassfish.jersey.media</groupId>
    <artifactId>jersey-media-json-jackson</artifactId>
    <version>2.22.1</version>
</dependency>

如果您不使用Maven,请确保在类路径中包含所有needed dependencies

Jackson 2.x提供rich set of annotations来控制如何从POJO生成JSON。

创建CRUD应用程序

定义将从/向JSON封送的POJO。以下面的类为例:

public class Book implements Serializable {

    private Long id;
    private String title;
    private String description;

    public Book {

    } 

    // getters and setters ommited
}

根据您的JSON提供程序,您可以使用注释POJO来控制JSON的生成方式。

创建REST端点。要将数据用作JSON,只需使用@Consumes(MediaType.APPLICATION_JSON)进行注释即可。要生成JSON,请使用@Produces(MediaType.APPLICATION_JSON)注释它。

考虑以下类作为开始的示例:

@Path("/books")
@Consumes(MediaType.APPLICATION_JSON)
@Produces(MediaType.APPLICATION_JSON)
public class BookEndpoint {

    @POST
    public Response create(Book book) {
        ...
    }

    @GET
    @Path("/id")
    public Response read(@QueryParam("id") Long id) {
        ...
    }

    @PUT
    @Path("/id")
    public Response update(@QueryParam("id") Long id, Book book) {
        ...
    }

    @DELETE
    @Path("/id")
    public Response delete(@QueryParam("id") Long id) {
        ...
    }
}

答案 1 :(得分:0)

在泽西岛使用function buildTable() { var rows = document.getElementById("setRows").value; var cols = document.getElementById("setCols").value; var table = "<table>"; table += "<tbody>"; for (i=0;i<rows;i++) { table += "<tr>"; for (j=0;j<cols;j++) { table += "<td>&nbsp;</td>"; } table += "</tr>"; } table += "</tbody>"; table += "</table>"; document.getElementById("tableHolder").innerHTML=table; } @Consumes来自定义请求和响应。

示例:我们有一个Car对象。

@Produces

RESTful服务:

public class Car {
    private Long id;
    private String color;
    private int maxSpeed;
    private String manufacturer;
    //...

    //Getter and Setter
}

Yo可以使用任何REST客户端来测试它,例如,Postman。

答案 2 :(得分:0)