【问题标题】:how to get JSON representation of Java Objects in JAX-RS layer in java EE 7?如何在 java EE 7 的 JAX-RS 层中获取 Java 对象的 JSON 表示?
【发布时间】:2015-01-22 00:04:28
【问题描述】:

我们目前正在使用 Java EE 5,我们在发送响应之前执行以下操作将 POJO 转换为 JSON。

    @GET
    @Path("/books")
    @Produces(MediaType.APPLICATION_JSON)
    public Response getBooks()  {
    List<Book> listOfBooks = getMiscService().getbooks();
    String response = "{\"books\":" + gson.toJson(listOfBooks) + "}";               
    return Response.status(Response.Status.OK).entity(response).build();
    }

我们正在使用谷歌的 gson API。现在我们正在重构代码以符合 Java EE 7 API,我想知道是否有任何 JSON 转换 API 可以将 POJO 转换为 JSON。

我知道 Java EE 7 中引入了 JsonObject API。但我仍然想知道如何获得我的 POJO 的 JSON 表示。

JsonObject jsonObject = Json.createObjectBuilder().add("books", myObject);

上面的 myObject 需要是我的对象的 JSON 表示是否正确?

我正在考虑这个。但这仍然使用 Gson

JsonObject jsonObject = Json.createObjectBuilder().add("books", gson.toJson(myObject));

这里推荐的方式是什么?

谢谢

【问题讨论】:

    标签: json jakarta-ee gson java-ee-7 jsonobject


    【解决方案1】:

    JAX-RS 会将您的对象转换为 JSON,无需手动执行。即以下代码:

    @GET
    @Path("/books")
    @Produces(MediaType.APPLICATION_JSON)
    public Response getBooks()  {
        List<Book> listOfBooks = getMiscService().getbooks();
        return Response.status(Response.Status.OK).entity(listOfBooks).build();
    }
    

    ...将生成一个 JSON,如下所示:

    [
        { "title": "Book1", "author": "Foo", ... },
        { "title": "Book2", "author": "Bar", ... },
        ...
    ]
    

    如果你想要一个 books 包装器,只需制作一个 bean:

    public class BooksWrapper {
        private List<Book> books;
        public BooksWrapper(List<Book> books) {
            this.books = books;
        }
        public List<Book> getBooks() {
            return books;
        }
    }
    

    并转换REST方法返回这个类型:

    @GET
    @Path("/books")
    @Produces(MediaType.APPLICATION_JSON)
    public Response getBooks()  {
        List<Book> listOfBooks = getMiscService().getbooks();
        BooksWrapper result = new BooksWrapper(listOfBooks);
        return Response.status(Response.Status.OK).entity(result).build();
    }
    

    【讨论】:

    • 我猜只有某些提供商会转换为 JSON,例如 RestEasy 或 Jersey?正确的。无论如何,这比我认为使用 gson 的方法更好
    • RestEasy 当然,但我相信这是标准/规范行为。
    猜你喜欢
    • 2013-02-06
    • 1970-01-01
    • 2019-04-30
    • 1970-01-01
    • 1970-01-01
    • 2017-01-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多